summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore19
-rw-r--r--LICENSE.GPL3676
-rw-r--r--LICENSE.LGPL2504
-rw-r--r--LICENSE.LGPL3165
-rw-r--r--LICENSE.MIT20
-rw-r--r--Makefile.am14
-rw-r--r--Makefile.in17
-rw-r--r--README.rst8
-rw-r--r--assorted/.gitignore1
-rw-r--r--assorted/Makefile.am7
-rw-r--r--assorted/deque2.c119
-rw-r--r--assorted/pack.c103
-rw-r--r--assorted/tofrac.c71
-rw-r--r--assorted/unit2any.c49
-rwxr-xr-xbuild-aux/ltmain.sh855
-rwxr-xr-xconfigure450
-rw-r--r--configure.ac5
-rw-r--r--debian/changelog7
-rw-r--r--debian/files1
-rw-r--r--debian/libhx-dev.symbols2
-rw-r--r--debian/libhx32.symbols5
-rw-r--r--doc/api.rst3
-rw-r--r--doc/changelog.rst67
-rw-r--r--doc/files_and_dirs.rst43
-rw-r--r--doc/misc_functions.rst5
-rw-r--r--doc/process_management.rst15
-rw-r--r--doc/socket_functions.rst12
-rw-r--r--doc/string_ops.rst17
-rw-r--r--include/Makefile.in1
-rw-r--r--include/libHX/misc.h2
-rw-r--r--include/libHX/string.h1
-rw-r--r--libHX.pc.in2
-rw-r--r--m4/.gitignore2
-rw-r--r--m4/libtool.m4227
-rw-r--r--m4/ltoptions.m44
-rw-r--r--m4/ltsugar.m42
-rw-r--r--m4/ltversion.m413
-rw-r--r--m4/lt~obsolete.m44
-rwxr-xr-xqconf12
-rw-r--r--src/.gitignore31
-rw-r--r--src/Makefile.am4
-rw-r--r--src/Makefile.in8
-rw-r--r--src/io.c11
-rw-r--r--src/libHX.map11
-rw-r--r--src/misc.c17
-rw-r--r--src/socket.c25
-rw-r--r--src/string.c88
-rw-r--r--src/tc-cast.c4
-rw-r--r--src/tc-compile.c2
-rw-r--r--src/tc-dir.c2
-rw-r--r--src/tc-io.c5
-rw-r--r--src/tc-list.c22
-rw-r--r--src/tc-map.c29
-rw-r--r--src/tc-memmem.c27
-rw-r--r--src/tc-misc.c19
-rw-r--r--src/tc-netio.c25
-rw-r--r--src/tc-option.c2
-rw-r--r--src/tc-proc.c2
-rw-r--r--src/tc-rand.c2
-rw-r--r--src/tc-shconfig.c19
-rw-r--r--src/tc-string.c88
-rw-r--r--src/tc-switchuser.c14
-rw-r--r--src/tc-time.c31
-rw-r--r--src/tc-xml.c29
-rw-r--r--src/uxcompat.h104
65 files changed, 1014 insertions, 3137 deletions
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index f79120e..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,19 +0,0 @@
-.deps/
-.libs/
-Makefile
-Makefile.in
-*.exe
-*.la
-*.lo
-*.o
-
-/aclocal.m4
-/autom4te.cache/
-/build-aux/
-/config.*
-/configure
-/configure~
-/libtool
-stamp-h1
-
-/libHX.pc
diff --git a/LICENSE.GPL3 b/LICENSE.GPL3
deleted file mode 100644
index 4432540..0000000
--- a/LICENSE.GPL3
+++ /dev/null
@@ -1,676 +0,0 @@
-
- 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>.
-
diff --git a/LICENSE.LGPL2 b/LICENSE.LGPL2
deleted file mode 100644
index 5ab7695..0000000
--- a/LICENSE.LGPL2
+++ /dev/null
@@ -1,504 +0,0 @@
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser 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 Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "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
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY 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
-LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- 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 library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/LICENSE.LGPL3 b/LICENSE.LGPL3
deleted file mode 100644
index fc8a5de..0000000
--- a/LICENSE.LGPL3
+++ /dev/null
@@ -1,165 +0,0 @@
- GNU LESSER 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.
-
-
- This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
- 0. Additional Definitions.
-
- As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
- "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
- An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
- A "Combined Work" is a work produced by combining or linking an
-Application with the Library. The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
- The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
- The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
- 1. Exception to Section 3 of the GNU GPL.
-
- You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
- 2. Conveying Modified Versions.
-
- If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
- a) under this License, provided that you make a good faith effort to
- ensure that, in the event an Application does not supply the
- function or data, the facility still operates, and performs
- whatever part of its purpose remains meaningful, or
-
- b) under the GNU GPL, with none of the additional permissions of
- this License applicable to that copy.
-
- 3. Object Code Incorporating Material from Library Header Files.
-
- The object code form of an Application may incorporate material from
-a header file that is part of the Library. You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
- a) Give prominent notice with each copy of the object code that the
- Library is used in it and that the Library and its use are
- covered by this License.
-
- b) Accompany the object code with a copy of the GNU GPL and this license
- document.
-
- 4. Combined Works.
-
- You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
- a) Give prominent notice with each copy of the Combined Work that
- the Library is used in it and that the Library and its use are
- covered by this License.
-
- b) Accompany the Combined Work with a copy of the GNU GPL and this license
- document.
-
- c) For a Combined Work that displays copyright notices during
- execution, include the copyright notice for the Library among
- these notices, as well as a reference directing the user to the
- copies of the GNU GPL and this license document.
-
- d) Do one of the following:
-
- 0) Convey the Minimal Corresponding Source under the terms of this
- License, and the Corresponding Application Code in a form
- suitable for, and under terms that permit, the user to
- recombine or relink the Application with a modified version of
- the Linked Version to produce a modified Combined Work, in the
- manner specified by section 6 of the GNU GPL for conveying
- Corresponding Source.
-
- 1) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (a) uses at run time
- a copy of the Library already present on the user's computer
- system, and (b) will operate properly with a modified version
- of the Library that is interface-compatible with the Linked
- Version.
-
- e) Provide Installation Information, but only if you would otherwise
- be required to provide such information under section 6 of the
- GNU GPL, and only to the extent that such information is
- necessary to install and execute a modified version of the
- Combined Work produced by recombining or relinking the
- Application with a modified version of the Linked Version. (If
- you use option 4d0, the Installation Information must accompany
- the Minimal Corresponding Source and Corresponding Application
- Code. If you use option 4d1, you must provide the Installation
- Information in the manner specified by section 6 of the GNU GPL
- for conveying Corresponding Source.)
-
- 5. Combined Libraries.
-
- You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
- a) Accompany the combined library with a copy of the same work based
- on the Library, uncombined with any other library facilities,
- conveyed under the terms of this License.
-
- b) Give prominent notice with the combined library that part of it
- is a work based on the Library, and explaining where to find the
- accompanying uncombined form of the same work.
-
- 6. Revised Versions of the GNU Lesser General Public License.
-
- The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser 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
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
- If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
diff --git a/LICENSE.MIT b/LICENSE.MIT
deleted file mode 100644
index 26f131d..0000000
--- a/LICENSE.MIT
+++ /dev/null
@@ -1,20 +0,0 @@
-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 (including the
-next paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS
-BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/Makefile.am b/Makefile.am
index 6c9d27e..3d02bf3 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -5,18 +5,6 @@ ACLOCAL_AMFLAGS = -I m4
SUBDIRS = include src
pkgconfig_DATA = libHX.pc
+EXTRA_DIST = doc/api.rst doc/assorted.txt doc/bitmaps.rst doc/changelog.rst doc/const_cast.c doc/dirstamp.rst doc/files_and_dirs.rst doc/generator.cpp doc/helper_headers.rst doc/history.rst doc/init.rst doc/inline_clist.rst doc/inline_list.rst doc/install.rst doc/libHX_Documentation.rst doc/linked_list.rst doc/macros.rst doc/maps.rst doc/memory_container.rst doc/misc_functions.rst doc/option_parsing.rst doc/process_management.rst doc/random_numbers.rst doc/shconfig.rst doc/socket_functions.rst doc/string_formatter.rst doc/string_ops.rst doc/strlcpy-timing.rst doc/time_functions.rst doc/typecheck_casts.rst doc/ux-file.rst doc/ux-mmap.rst
${pkgconfig_DATA}: ${top_builddir}/config.status
-
-tmpdir := $(shell mktemp -dtu)
-packer = xz
-packext = .tar.xz
-
-.PHONY: tarball
-tarball:
-# do not use mkdir_p here.
- mkdir ${tmpdir}
- cd ${top_srcdir} && git archive --prefix=${PACKAGE_NAME}-${PACKAGE_VERSION}/ HEAD | tar -C ${tmpdir} -x
- cd ${tmpdir}/${PACKAGE_NAME}-${PACKAGE_VERSION} && autoreconf -fi && rm -Rf autom4te.cache
- tar --use=${packer} -C ${tmpdir} -cf ${PACKAGE_NAME}-${PACKAGE_VERSION}${packext} --owner=root --group=root ${PACKAGE_NAME}-${PACKAGE_VERSION}/
- rm -Rf ${tmpdir}
diff --git a/Makefile.in b/Makefile.in
index b720a82..b3403df 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -198,7 +198,8 @@ am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
$(top_srcdir)/build-aux/ltmain.sh \
$(top_srcdir)/build-aux/missing COPYING build-aux/ar-lib \
build-aux/compile build-aux/config.guess build-aux/config.sub \
- build-aux/install-sh build-aux/ltmain.sh build-aux/missing
+ build-aux/depcomp build-aux/install-sh build-aux/ltmain.sh \
+ build-aux/missing
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
@@ -274,7 +275,6 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
-FILECMD = @FILECMD@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -378,9 +378,7 @@ top_srcdir = @top_srcdir@
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = include src
pkgconfig_DATA = libHX.pc
-tmpdir := $(shell mktemp -dtu)
-packer = xz
-packext = .tar.xz
+EXTRA_DIST = doc/api.rst doc/assorted.txt doc/bitmaps.rst doc/changelog.rst doc/const_cast.c doc/dirstamp.rst doc/files_and_dirs.rst doc/generator.cpp doc/helper_headers.rst doc/history.rst doc/init.rst doc/inline_clist.rst doc/inline_list.rst doc/install.rst doc/libHX_Documentation.rst doc/linked_list.rst doc/macros.rst doc/maps.rst doc/memory_container.rst doc/misc_functions.rst doc/option_parsing.rst doc/process_management.rst doc/random_numbers.rst doc/shconfig.rst doc/socket_functions.rst doc/string_formatter.rst doc/string_ops.rst doc/strlcpy-timing.rst doc/time_functions.rst doc/typecheck_casts.rst doc/ux-file.rst doc/ux-mmap.rst
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
@@ -900,15 +898,6 @@ uninstall-am: uninstall-pkgconfigDATA
${pkgconfig_DATA}: ${top_builddir}/config.status
-.PHONY: tarball
-tarball:
-# do not use mkdir_p here.
- mkdir ${tmpdir}
- cd ${top_srcdir} && git archive --prefix=${PACKAGE_NAME}-${PACKAGE_VERSION}/ HEAD | tar -C ${tmpdir} -x
- cd ${tmpdir}/${PACKAGE_NAME}-${PACKAGE_VERSION} && autoreconf -fi && rm -Rf autom4te.cache
- tar --use=${packer} -C ${tmpdir} -cf ${PACKAGE_NAME}-${PACKAGE_VERSION}${packext} --owner=root --group=root ${PACKAGE_NAME}-${PACKAGE_VERSION}/
- rm -Rf ${tmpdir}
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/README.rst b/README.rst
deleted file mode 100644
index 3ac5e61..0000000
--- a/README.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-libHX collects many useful day-to-day functions, intended to reduce the amount
-of otherwise repeatedly open-coded instructions.
-
-It has maps, deques, linked lists, string formatting and autoresizing, option
-and config file parsing, type checking casts (for C), directory traversal, etc.
-
-There is more documentation in the aptly-named directory ``doc``.
-The entrypoint is `doc/libHX_Documentation.rst <doc/libHX_Documentation.rst>`_.
diff --git a/assorted/.gitignore b/assorted/.gitignore
deleted file mode 100644
index 7c16b0a..0000000
--- a/assorted/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/unit2any
diff --git a/assorted/Makefile.am b/assorted/Makefile.am
deleted file mode 100644
index fc3c7f1..0000000
--- a/assorted/Makefile.am
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- Makefile -*-
-
-AM_CPPFLAGS = -I${top_srcdir}/include
-
-noinst_PROGRAMS = unit2any
-
-unit2any_LDADD = ../src/libHX.la
diff --git a/assorted/deque2.c b/assorted/deque2.c
deleted file mode 100644
index e5c4798..0000000
--- a/assorted/deque2.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * libHX/assorted/deque2.c
- * Copyright Jan Engelhardt, 2002-2007
- *
- * This file is part of libHX. libHX is free software; you can
- * redistribute it and/or modify it under the terms of the GNU Lesser
- * General Public License as published by the Free Software Foundation;
- * either version 2.1 or (at your option) any later version.
- *
- * deque2.c:
- * Assorted DEQUE functions that are not deemed to be useful in the
- * (compiled) library at this time.
- */
-#include <stdio.h>
-#include <libHX.h>
-
-EXPORT_SYMBOL struct HXdeque_node *HXdeque_rfind(struct HXdeque *dq,
- const void *ptr)
-{
- struct HXdeque_node *trav;
- for (trav = dq->last; trav != NULL; trav = trav->prev)
- if (trav->ptr == ptr)
- return trav;
- return NULL;
-}
-
-EXPORT_SYMBOL void *HXdeque_rget(struct HXdeque *dq, const void *ptr)
-{
- struct HXdeque_node *trav;
- for (trav = dq->last; trav != NULL; trav = trav->prev)
- if (trav->ptr == ptr)
- return trav->ptr;
- return NULL;
-}
-
-EXPORT_SYMBOL void *HXdeque_sget(struct HXdeque *dq, const char *s)
-{
- struct HXdeque_node *trav;
- for (trav = dq->first; trav != NULL; trav = trav->next)
- if (strcmp(trav->ptr, s) == 0)
- return trav->ptr;
- return NULL;
-}
-
-EXPORT_SYMBOL struct HXdeque_node *HXdeque_dup(struct HXdeque *dq)
-{
- /*
- * Duplicate the object on top of the stack by popping it off and
- * adding it again, twice.
- */
- if (dq->last == NULL)
- return NULL;
-
- /*
- * The mathematical axiomatic definition is that the last element is
- * popped off and pushed twice. We optimize by simply "looking" at the
- * last and push it again.
- */
- return HXdeque_push(dq, dq->last->ptr);
-}
-
-EXPORT_SYMBOL struct HXdeque_node *HXdeque_rdup(struct HXdeque *dq)
-{
- /* Same as HXdeque_dup(), but works on the bottom of the stack */
- if (dq->first == NULL)
- return NULL;
- return HXdeque_unshift(dq, dq->first->ptr);
-}
-
-EXPORT_SYMBOL struct HXdeque_node *HXdeque_toprr(struct HXdeque *dq)
-{
- /*
- * Rotates the topmost three items right ([bottom]...CBA[top] =>
- * [bottom]...ACB[top]). Also works if there are only two items in the
- * stack.
- */
- struct HXdeque_node *p = dq->last;
- if (p == NULL)
- return NULL;
- HXdeque_down(p);
- HXdeque_down(p);
- return p;
-}
-
-EXPORT_SYMBOL struct HXdeque_node *HXdeque_toprl(struct HXdeque *dq)
-{
- /* Rotates the topmost three items left (...CBA => ...BAC) */
- struct HXdeque_node *p = dq->last;
- if (p == NULL)
- return NULL;
- if (p->Prev != NULL) p = p->Prev;
- if (p->Prev != NULL) p = p->Prev;
- HXdeque_up(p);
- HXdeque_up(p);
- return p;
-}
-
-EXPORT_SYMBOL struct HXdeque_node *HXdeque_botrr(struct HXdeque *dq)
-{
- /* (CBA... => ...ACB) */
- struct HXdeque_node *p = dq->first;
- if (p == NULL)
- return NULL;
- if (p->Prev != NULL) p = p->Prev;
- if (p->Prev != NULL) p = p->Prev;
- HXdeque_down(p);
- HXdeque_down(p);
- return p;
-}
-
-EXPORT_SYMBOL struct HXdeque_node *HXdeque_botrl(struct HXdeque *dq)
-{
- struct HXdeque_node *p = dq->first;
- if (p == NULL)
- return NULL;
- HXdeque_up(p);
- HXdeque_up(p);
- return p;
-}
diff --git a/assorted/pack.c b/assorted/pack.c
deleted file mode 100644
index 9eec65e..0000000
--- a/assorted/pack.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * libHX/assorted/pack.c
- * Copyright Jan Engelhardt, 1999-2005
- *
- * This file is part of libHX. libHX is free software; you can
- * redistribute it and/or modify it under the terms of the GNU Lesser
- * General Public License as published by the Free Software Foundation;
- * either version 2.1 or (at your option) any later version.
- */
-#include <sys/types.h>
-#include <stdarg.h>
-#include <stdint.h>
-#include <string.h>
-
-size_t HX_pack(char *buf, size_t buflen, const char *fmt, ...)
-{
- char *obp = buf;
- int run = 1;
- va_list ap;
- va_start(ap, fmt);
-
- while (run && *fmt != '\0') {
- switch (*fmt++) {
- case 'A': /* string with up to 255 chars */
- case 'a': {
- const char *src = va_arg(ap, const char *);
- size_t slen = strlen(src) & 0xFF;
- if (buflen < slen + 1) {
- run = 0;
- break;
- }
- *buf++ = slen;
- memcpy(buf, src, slen);
- buf += slen;
- buflen -= slen + 1;
- break;
- }
- case 'C': /* unsigned char */
- case 'c':
- if (buflen-- < 1) {
- run = 0;
- break;
- }
- /*
- * Minimum object's size being pushed on the stack is 2
- * bytes since short int is promoted to int when passed
- * thru va_arg and stays uncasted. (FIXME)
- */
- *buf++ = va_arg(ap, unsigned int);
- break;
- case 'H': /* unsigned short */
- case 'h':
- if (buflen < sizeof(uint16_t)) {
- run = 0;
- break;
- }
- *((uint16_t *)buf) = va_arg(ap, uint16_t);
- buf += sizeof(uint16_t);
- buflen -= sizeof(uint16_t);
- break;
- case 'L': /* unsigned long */
- case 'l':
- if (buflen < sizeof(uint32_t)) {
- run = 0;
- break;
- }
- *((uint32_t *)buf) = va_arg(ap, uint32_t);
- buf += sizeof(uint32_t);
- buflen -= sizeof(uint32_t);
- break;
- case 'S': /* string with up to 65535 chars */
- case 's': {
- const char *src = va_arg(ap, const char *);
- size_t slen = strlen(src) & 0xFFFF;
- if (buflen < slen + 2) {
- run = 0;
- break;
- }
- *((unsigned short *)buf) = slen;
- memcpy(buf += 2, src, slen);
- buf += slen;
- buflen -= slen + 2;
- break;
- }
- case 'V': /* fixed size string */
- case 'v': {
- void *src = va_arg(ap, void *);
- size_t slen = va_arg(ap, size_t);
- if (buflen < slen) {
- run = 0;
- break;
- }
- memcpy(buf, src, slen);
- buf += slen;
- buflen -= slen;
- break;
- }
- } /* switch */
- }
-
- va_end(ap);
- return buf - obp;
-}
diff --git a/assorted/tofrac.c b/assorted/tofrac.c
deleted file mode 100644
index e4c1480..0000000
--- a/assorted/tofrac.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * libHX/assorted/tofrac.c
- * Copyright Jan Engelhardt, 1999-2010
- *
- * This file is part of libHX. libHX is free software; you can
- * redistribute it and/or modify it under the terms of the GNU Lesser
- * General Public License as published by the Free Software Foundation;
- * either version 2.1 or (at your option) any later version.
- */
-/*
- * Calculates a readable fraction (i.e. 1/3) from arg and puts the
- * *numerator into num, the denominator into *denom. Since the fraction
- * is found out by an iterative loop, you can specify the minimum value
- * of the denominator in *num and the maximum value of the denominator
- * into *denom before calling the function.
- *
- * If a suitable fraction has been found (within the range of the
- * minimum / maximum denominator, *num and *denom will be overwritten
- * with the results and true is returned; false for no success.
- *
- * You need to re-put your min/max denom values into *num and *denom
- * then.
- */
-#include <sys/types.h>
-#include <limits.h>
-#include <math.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-/* This simplistic version does not deal with negative numbers. */
-
-static bool HX_tofrac(double arg, unsigned long *num, unsigned long *denom)
-{
- unsigned long i, min_denom = *num, max_denom = *denom;
- double j, s;
-
- /*
- * This tries all possible denominators until @arg multiplied by @i
- * gives a number that has a fractional part of 0, which is when we
- * found the optimal fraction.
- */
- for (i = min_denom; i < max_denom; ++i) {
- s = arg * i;
- modf(s, &j);
- if (s == j) {
- *num = j;
- *denom = i;
- return true;
- }
- }
- return false;
-}
-
-int main(int argc, const char **argv)
-{
- unsigned long d = 1, n = ULONG_MAX;
-
- if (argc < 2) {
- fprintf(stderr, "Usage: %s 3.141592\n", *argv);
- return EXIT_FAILURE;
- }
-
- if (!HX_tofrac(strtod(argv[1], NULL), &d, &n)) {
- fprintf(stderr, "Our algorithm was too weak :-)\n");
- return EXIT_FAILURE;
- }
-
- printf("%lu/%lu\n", d, n);
- return EXIT_SUCCESS;
-}
diff --git a/assorted/unit2any.c b/assorted/unit2any.c
deleted file mode 100644
index 74e87d3..0000000
--- a/assorted/unit2any.c
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <stdbool.h>
-#include <stdlib.h>
-#include <libHX/option.h>
-
-static double dpi = 96;
-
-static void px2any(const struct HXoptcb *cbi)
-{
- double px = cbi->data_dbl;
-
- printf("%f px are (at %f DPI) equal to:\n", px, dpi);
- printf("\t%f inch\n", px / dpi);
- printf("\t%f pt\n", px * 72 / dpi);
- printf("\t%f cm\n", px * 2.54 / dpi);
-}
-
-static void pt2any(const struct HXoptcb *cbi)
-{
- double pt = cbi->data_dbl;
-
- printf("%f pt are equal to:\n", pt);
- printf("\t%f inch\n", pt / 72);
- printf("\t%f px (at %f DPI)\n", dpi * pt / 72, dpi);
- printf("\t%f cm\n", pt * 2.54 / 72);
-}
-
-static const struct HXoption option_table[] = {
- {.sh = 'D', .ln = "dpi", .type = HXTYPE_DOUBLE, .ptr = &dpi,
- .help = "Resolution (default: 96 dpi)"},
- {.sh = 'P', .ln = "px", .type = HXTYPE_DOUBLE, .cb = px2any},
- {.sh = 'p', .ln = "pt", .type = HXTYPE_DOUBLE, .cb = pt2any},
- HXOPT_AUTOHELP,
- HXOPT_TABLEEND,
-};
-
-static bool get_options(int *argc, const char ***argv)
-{
-}
-
-int main(int argc, const char **argv)
-{
- int ret;
-
- ret = HX_getopt(option_table, &argc, &argv, HXOPT_USAGEONERR);
- if (ret != HXOPT_ERR_SUCCESS)
- return EXIT_FAILURE;
-
-
-}
diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
index 2a50d7f..0f0a2da 100755
--- a/build-aux/ltmain.sh
+++ b/build-aux/ltmain.sh
@@ -1,12 +1,12 @@
-#! /usr/bin/env sh
+#! /bin/sh
## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
-## by inline-source v2019-02-19.15
+## by inline-source v2014-01-03.01
-# libtool (GNU libtool) 2.4.7
+# 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-2019, 2021-2022 Free Software Foundation, Inc.
+# 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.
@@ -31,8 +31,8 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION=2.4.7
-package_revision=2.4.7
+VERSION=2.4.6
+package_revision=2.4.6
## ------ ##
@@ -64,25 +64,34 @@ package_revision=2.4.7
# libraries, which are installed to $pkgauxdir.
# Set a version string for this script.
-scriptversion=2019-02-19.15; # UTC
+scriptversion=2015-01-20.17; # UTC
# General shell script boiler plate, and helper functions.
# Written by Gary V. Vaughan, 2004
-# This is free software. There is NO warranty; not even for
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#
-# Copyright (C) 2004-2019, 2021 Bootstrap Authors
-#
-# This file is dual licensed under the terms of the MIT license
-# <https://opensource.org/license/MIT>, and GPL version 2 or later
-# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
-# these licenses when using or redistributing this software or any of
-# the files within it. See the URLs above, or the file `LICENSE`
-# included in the Bootstrap distribution for the full license texts.
+# 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.
-# Please report bugs or propose patches to:
-# <https://github.com/gnulib-modules/bootstrap/issues>
+# 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.
## ------ ##
@@ -130,12 +139,9 @@ do
_G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
fi"
done
-# These NLS vars are set unconditionally (bootstrap issue #24). Unset those
-# in case the environment reset is needed later and the $save_* variant is not
-# defined (see the code above).
-LC_ALL=C
-LANGUAGE=C
-export LANGUAGE LC_ALL
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Make sure IFS has a sensible default
sp=' '
@@ -153,26 +159,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
-# func_unset VAR
-# --------------
-# Portably unset VAR.
-# In some shells, an 'unset VAR' statement leaves a non-zero return
-# status if VAR is already unset, which might be problematic if the
-# statement is used at the end of a function (thus poisoning its return
-# value) or when 'set -e' is active (causing even a spurious abort of
-# the script in this case).
-func_unset ()
-{
- { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; }
-}
-
-
-# Make sure CDPATH doesn't cause `cd` commands to output the target dir.
-func_unset CDPATH
-
-# Make sure ${,E,F}GREP behave sanely.
-func_unset GREP_OPTIONS
-
## ------------------------- ##
## Locate command utilities. ##
@@ -273,7 +259,7 @@ test -z "$SED" && {
rm -f conftest.in conftest.tmp conftest.nl conftest.out
}
- func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin"
+ func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
rm -f conftest.sed
SED=$func_path_progs_result
}
@@ -309,7 +295,7 @@ test -z "$GREP" && {
rm -f conftest.in conftest.tmp conftest.nl conftest.out
}
- func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin"
+ func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
GREP=$func_path_progs_result
}
@@ -374,35 +360,6 @@ sed_double_backslash="\
s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
s/\n//g"
-# require_check_ifs_backslash
-# ---------------------------
-# Check if we can use backslash as IFS='\' separator, and set
-# $check_ifs_backshlash_broken to ':' or 'false'.
-require_check_ifs_backslash=func_require_check_ifs_backslash
-func_require_check_ifs_backslash ()
-{
- _G_save_IFS=$IFS
- IFS='\'
- _G_check_ifs_backshlash='a\\b'
- for _G_i in $_G_check_ifs_backshlash
- do
- case $_G_i in
- a)
- check_ifs_backshlash_broken=false
- ;;
- '')
- break
- ;;
- *)
- check_ifs_backshlash_broken=:
- break
- ;;
- esac
- done
- IFS=$_G_save_IFS
- require_check_ifs_backslash=:
-}
-
## ----------------- ##
## Global variables. ##
@@ -623,16 +580,16 @@ if test yes = "$_G_HAVE_PLUSEQ_OP"; then
{
$debug_cmd
- func_quote_arg pretty "$2"
- eval "$1+=\\ \$func_quote_arg_result"
+ func_quote_for_eval "$2"
+ eval "$1+=\\ \$func_quote_for_eval_result"
}'
else
func_append_quoted ()
{
$debug_cmd
- func_quote_arg pretty "$2"
- eval "$1=\$$1\\ \$func_quote_arg_result"
+ func_quote_for_eval "$2"
+ eval "$1=\$$1\\ \$func_quote_for_eval_result"
}
fi
@@ -1134,203 +1091,85 @@ func_relative_path ()
}
-# func_quote_portable EVAL ARG
-# ----------------------------
-# Internal function to portably implement func_quote_arg. Note that we still
-# keep attention to performance here so we as much as possible try to avoid
-# calling sed binary (so far O(N) complexity as long as func_append is O(1)).
-func_quote_portable ()
+# 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
- $require_check_ifs_backslash
-
- func_quote_portable_result=$2
-
- # one-time-loop (easy break)
- while true
- do
- if $1; then
- func_quote_portable_result=`$ECHO "$2" | $SED \
- -e "$sed_double_quote_subst" -e "$sed_double_backslash"`
- break
- fi
-
- # Quote for eval.
- case $func_quote_portable_result in
+ func_quote_for_eval_unquoted_result=
+ func_quote_for_eval_result=
+ while test 0 -lt $#; do
+ case $1 in
*[\\\`\"\$]*)
- # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string
- # contains the shell wildcard characters.
- case $check_ifs_backshlash_broken$func_quote_portable_result in
- :*|*[\[\*\?]*)
- func_quote_portable_result=`$ECHO "$func_quote_portable_result" \
- | $SED "$sed_quote_subst"`
- break
- ;;
- esac
+ _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
- func_quote_portable_old_IFS=$IFS
- for _G_char in '\' '`' '"' '$'
- do
- # STATE($1) PREV($2) SEPARATOR($3)
- set start "" ""
- func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
- IFS=$_G_char
- for _G_part in $func_quote_portable_result
- do
- case $1 in
- quote)
- func_append func_quote_portable_result "$3$2"
- set quote "$_G_part" "\\$_G_char"
- ;;
- start)
- set first "" ""
- func_quote_portable_result=
- ;;
- first)
- set quote "$_G_part" ""
- ;;
- esac
- done
- done
- IFS=$func_quote_portable_old_IFS
+ 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
- break
- done
- func_quote_portable_unquoted_result=$func_quote_portable_result
- case $func_quote_portable_result 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.
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- func_quote_portable_result=\"$func_quote_portable_result\"
- ;;
- 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_quotefast_eval ARG
-# -----------------------
-# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG',
-# but optimized for speed. Result is stored in $func_quotefast_eval.
-if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
- printf -v _GL_test_printf_tilde %q '~'
- if test '\~' = "$_GL_test_printf_tilde"; then
- func_quotefast_eval ()
- {
- printf -v func_quotefast_eval_result %q "$1"
- }
- else
- # Broken older Bash implementations. Make those faster too if possible.
- func_quotefast_eval ()
- {
- case $1 in
- '~'*)
- func_quote_portable false "$1"
- func_quotefast_eval_result=$func_quote_portable_result
- ;;
- *)
- printf -v func_quotefast_eval_result %q "$1"
- ;;
- esac
- }
- fi
-else
- func_quotefast_eval ()
- {
- func_quote_portable false "$1"
- func_quotefast_eval_result=$func_quote_portable_result
- }
-fi
-
+# 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
-# func_quote_arg MODEs ARG
-# ------------------------
-# Quote one ARG to be evaled later. MODEs argument may contain zero or more
-# specifiers listed below separated by ',' character. This function returns two
-# values:
-# i) func_quote_arg_result
-# double-quoted (when needed), suitable for a subsequent eval
-# ii) func_quote_arg_unquoted_result
-# has all characters that are still active within double
-# quotes backslashified. Available only if 'unquoted' is specified.
-#
-# Available modes:
-# ----------------
-# 'eval' (default)
-# - escape shell special characters
-# 'expand'
-# - the same as 'eval'; but do not quote variable references
-# 'pretty'
-# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might
-# be used later in func_quote to get output like: 'echo "a b"' instead
-# of 'echo a\ b'. This is slower than default on some shells.
-# 'unquoted'
-# - produce also $func_quote_arg_unquoted_result which does not contain
-# wrapping double-quotes.
-#
-# Examples for 'func_quote_arg pretty,unquoted string':
-#
-# string | *_result | *_unquoted_result
-# ------------+-----------------------+-------------------
-# " | \" | \"
-# a b | "a b" | a b
-# "a b" | "\"a b\"" | \"a b\"
-# * | "*" | *
-# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\"
-#
-# Examples for 'func_quote_arg pretty,unquoted,expand string':
-#
-# string | *_result | *_unquoted_result
-# --------------+---------------------+--------------------
-# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\"
-func_quote_arg ()
-{
- _G_quote_expand=false
- case ,$1, in
- *,expand,*)
- _G_quote_expand=:
- ;;
+ case $1 in
+ *[\\\`\"]*)
+ _G_arg=`$ECHO "$1" | $SED \
+ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
+ *)
+ _G_arg=$1 ;;
esac
- case ,$1, in
- *,pretty,*|*,expand,*|*,unquoted,*)
- func_quote_portable $_G_quote_expand "$2"
- func_quote_arg_result=$func_quote_portable_result
- func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
- ;;
- *)
- # Faster quote-for-eval for some shells.
- func_quotefast_eval "$2"
- func_quote_arg_result=$func_quotefast_eval_result
+ 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 MODEs ARGs...
-# ------------------------
-# Quote all ARGs to be evaled later and join them into single command. See
-# func_quote_arg's description for more info.
-func_quote ()
-{
- $debug_cmd
- _G_func_quote_mode=$1 ; shift
- func_quote_result=
- while test 0 -lt $#; do
- func_quote_arg "$_G_func_quote_mode" "$1"
- if test -n "$func_quote_result"; then
- func_append func_quote_result " $func_quote_arg_result"
- else
- func_append func_quote_result "$func_quote_arg_result"
- fi
- shift
- done
+ func_quote_for_expand_result=$_G_arg
}
@@ -1376,8 +1215,8 @@ func_show_eval ()
_G_cmd=$1
_G_fail_exp=${2-':'}
- func_quote_arg pretty,expand "$_G_cmd"
- eval "func_notquiet $func_quote_arg_result"
+ func_quote_for_expand "$_G_cmd"
+ eval "func_notquiet $func_quote_for_expand_result"
$opt_dry_run || {
eval "$_G_cmd"
@@ -1402,8 +1241,8 @@ func_show_eval_locale ()
_G_fail_exp=${2-':'}
$opt_quiet || {
- func_quote_arg expand,pretty "$_G_cmd"
- eval "func_echo $func_quote_arg_result"
+ func_quote_for_expand "$_G_cmd"
+ eval "func_echo $func_quote_for_expand_result"
}
$opt_dry_run || {
@@ -1530,26 +1369,30 @@ func_lt_ver ()
# 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
-# This is free software. There is NO warranty; not even for
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#
-# Copyright (C) 2010-2019, 2021 Bootstrap Authors
-#
-# This file is dual licensed under the terms of the MIT license
-# <https://opensource.org/license/MIT>, and GPL version 2 or later
-# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
-# these licenses when using or redistributing this software or any of
-# the files within it. See the URLs above, or the file `LICENSE`
-# included in the Bootstrap distribution for the full license texts.
+# 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.
-# Please report bugs or propose patches to:
-# <https://github.com/gnulib-modules/bootstrap/issues>
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
-# Set a version string for this script.
-scriptversion=2019-02-19.15; # UTC
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General 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.
## ------ ##
@@ -1572,7 +1415,7 @@ scriptversion=2019-02-19.15; # UTC
#
# 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 '# Copyright'.
+# 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
@@ -1584,7 +1427,7 @@ scriptversion=2019-02-19.15; # UTC
# to display verbose messages only when your user has specified
# '--verbose'.
#
-# After sourcing this file, you can plug in processing for additional
+# 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.
@@ -1633,8 +1476,8 @@ fatal_help="Try '\$progname --help' for more information."
## ------------------------- ##
# This section contains functions for adding, removing, and running hooks
-# in the main code. A hook is just a list of function names that can be
-# run in order later on.
+# 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
# -----------------------
@@ -1667,8 +1510,7 @@ func_add_hook ()
# func_remove_hook FUNC_NAME HOOK_FUNC
# ------------------------------------
-# Remove HOOK_FUNC from the list of hook functions to be called by
-# FUNC_NAME.
+# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
func_remove_hook ()
{
$debug_cmd
@@ -1677,28 +1519,10 @@ func_remove_hook ()
}
-# func_propagate_result FUNC_NAME_A FUNC_NAME_B
-# ---------------------------------------------
-# If the *_result variable of FUNC_NAME_A _is set_, assign its value to
-# *_result variable of FUNC_NAME_B.
-func_propagate_result ()
-{
- $debug_cmd
-
- func_propagate_result_result=:
- if eval "test \"\${${1}_result+set}\" = set"
- then
- eval "${2}_result=\$${1}_result"
- else
- func_propagate_result_result=false
- fi
-}
-
-
# func_run_hooks FUNC_NAME [ARG]...
# ---------------------------------
# Run all hook functions registered to FUNC_NAME.
-# It's assumed that the list of hook functions contains nothing more
+# 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.
@@ -1708,19 +1532,22 @@ func_run_hooks ()
case " $hookable_fns " in
*" $1 "*) ;;
- *) func_fatal_error "'$1' does not support hook functions." ;;
+ *) 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
- func_unset "${_G_hook}_result"
- eval $_G_hook '${1+"$@"}'
- func_propagate_result $_G_hook func_run_hooks
- if $func_propagate_result_result; then
- eval set dummy "$func_run_hooks_result"; shift
- fi
+ 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
}
@@ -1730,18 +1557,10 @@ func_run_hooks ()
## --------------- ##
# In order to add your own option parsing hooks, you must accept the
-# full positional parameter list from your hook function. You may remove
-# or edit any options that you action, and then pass back the remaining
-# unprocessed options in '<hooked_function_name>_result', escaped
-# suitably for 'eval'.
-#
-# The '<hooked_function_name>_result' variable is automatically unset
-# before your hook gets called; for best performance, only set the
-# *_result variable when necessary (i.e. don't call the 'func_quote'
-# function unnecessarily because it can be an expensive operation on some
-# machines).
-#
-# Like this:
+# 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 ()
# {
@@ -1751,8 +1570,9 @@ func_run_hooks ()
# usage_message=$usage_message'
# -s, --silent don'\''t print informational messages
# '
-# # No change in '$@' (ignored completely by this hook). Leave
-# # my_options_prep_result variable intact.
+#
+# func_quote_for_eval ${1+"$@"}
+# my_options_prep_result=$func_quote_for_eval_result
# }
# func_add_hook func_options_prep my_options_prep
#
@@ -1761,36 +1581,25 @@ func_run_hooks ()
# {
# $debug_cmd
#
-# args_changed=false
-#
-# # Note that, for efficiency, we parse as many options as we can
+# # 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=:
-# args_changed=:
-# ;;
+# --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
-# args_changed=:
# ;;
-# *) # Make sure the first unrecognised option "$_G_opt"
-# # is added back to "$@" in case we need it later,
-# # if $args_changed was set to 'true'.
-# set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
+# *) set dummy "$_G_opt" "$*"; shift; break ;;
# esac
# done
#
-# # Only call 'func_quote' here if we processed at least one argument.
-# if $args_changed; then
-# func_quote eval ${1+"$@"}
-# my_silent_option_result=$func_quote_result
-# fi
+# func_quote_for_eval ${1+"$@"}
+# my_silent_option_result=$func_quote_for_eval_result
# }
# func_add_hook func_parse_options my_silent_option
#
@@ -1801,26 +1610,17 @@ func_run_hooks ()
#
# $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 also need to manually amend $usage_message to reflect the extra
+# 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_finish [ARG]...
-# ----------------------------
-# Finishing the option parse loop (call 'func_options' hooks ATM).
-func_options_finish ()
-{
- $debug_cmd
-
- func_run_hooks func_options ${1+"$@"}
- func_propagate_result func_run_hooks func_options_finish
-}
-
-
# func_options [ARG]...
# ---------------------
# All the functions called inside func_options are hookable. See the
@@ -1830,27 +1630,17 @@ func_options ()
{
$debug_cmd
- _G_options_quoted=false
+ 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"}
- for my_func in options_prep parse_options validate_options options_finish
- do
- func_unset func_${my_func}_result
- func_unset func_run_hooks_result
- eval func_$my_func '${1+"$@"}'
- func_propagate_result func_$my_func func_options
- if $func_propagate_result_result; then
- eval set dummy "$func_options_result"; shift
- _G_options_quoted=:
- fi
- done
+ eval func_run_hooks func_options \
+ ${func_validate_options_result+"$func_validate_options_result"}
- $_G_options_quoted || {
- # As we (func_options) are top-level options-parser function and
- # nobody quoted "$@" for us yet, we need to do it explicitly for
- # caller.
- func_quote eval ${1+"$@"}
- func_options_result=$func_quote_result
- }
+ # save modified positional parameters for caller
+ func_options_result=$func_run_hooks_result
}
@@ -1859,8 +1649,9 @@ func_options ()
# 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 propagate that back to rest of this script, then the complete
-# modified list must be put in 'func_run_hooks_result' before returning.
+# 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 ()
{
@@ -1871,7 +1662,9 @@ func_options_prep ()
opt_warning_types=
func_run_hooks func_options_prep ${1+"$@"}
- func_propagate_result func_run_hooks func_options_prep
+
+ # save modified positional parameters for caller
+ func_options_prep_result=$func_run_hooks_result
}
@@ -1883,32 +1676,25 @@ func_parse_options ()
{
$debug_cmd
- _G_parse_options_requote=false
+ 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+"$@"}
- func_propagate_result func_run_hooks func_parse_options
- if $func_propagate_result_result; then
- eval set dummy "$func_parse_options_result"; shift
- # Even though we may have changed "$@", we passed the "$@" array
- # down into the hook and it quoted it for us (because we are in
- # this if-branch). No need to quote it again.
- _G_parse_options_requote=false
- fi
+
+ # 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
- # We expect that one of the options parsed in this function matches
- # and thus we remove _G_opt from "$@" and need to re-quote.
- _G_match_parse_options=:
_G_opt=$1
shift
case $_G_opt in
--debug|-x) debug_cmd='set -x'
- func_echo "enabling shell trace mode" >&2
+ func_echo "enabling shell trace mode"
$debug_cmd
;;
@@ -1918,10 +1704,7 @@ func_parse_options ()
;;
--warnings|--warning|-W)
- if test $# = 0 && func_missing_arg $_G_opt; then
- _G_parse_options_requote=:
- break
- fi
+ test $# = 0 && func_missing_arg $_G_opt && break
case " $warning_categories $1" in
*" $1 "*)
# trailing space prevents matching last $1 above
@@ -1974,24 +1757,15 @@ func_parse_options ()
shift
;;
- --) _G_parse_options_requote=: ; break ;;
+ --) break ;;
-*) func_fatal_help "unrecognised option: '$_G_opt'" ;;
- *) set dummy "$_G_opt" ${1+"$@"}; shift
- _G_match_parse_options=false
- break
- ;;
+ *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
esac
-
- if $_G_match_parse_options; then
- _G_parse_options_requote=:
- fi
done
- if $_G_parse_options_requote; then
- # save modified positional parameters for caller
- func_quote eval ${1+"$@"}
- func_parse_options_result=$func_quote_result
- fi
+ # save modified positional parameters for caller
+ func_quote_for_eval ${1+"$@"}
+ func_parse_options_result=$func_quote_for_eval_result
}
@@ -2008,10 +1782,12 @@ func_validate_options ()
test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
func_run_hooks func_validate_options ${1+"$@"}
- func_propagate_result func_run_hooks func_validate_options
# Bail if the options were screwed!
$exit_cmd $EXIT_FAILURE
+
+ # save modified positional parameters for caller
+ func_validate_options_result=$func_run_hooks_result
}
@@ -2067,8 +1843,8 @@ func_missing_arg ()
# func_split_equals STRING
# ------------------------
-# Set func_split_equals_lhs and func_split_equals_rhs shell variables
-# after splitting STRING at the '=' sign.
+# 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 \
@@ -2083,9 +1859,8 @@ then
func_split_equals_lhs=${1%%=*}
func_split_equals_rhs=${1#*=}
- if test "x$func_split_equals_lhs" = "x$1"; then
- func_split_equals_rhs=
- fi
+ 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.
@@ -2095,7 +1870,7 @@ else
func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
func_split_equals_rhs=
- test "x$func_split_equals_lhs=" = "x$1" \
+ test "x$func_split_equals_lhs" = "x$1" \
|| func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
}
fi #func_split_equals
@@ -2121,7 +1896,7 @@ else
{
$debug_cmd
- func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'`
+ func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
}
fi #func_split_short_opt
@@ -2163,44 +1938,31 @@ func_usage_message ()
# func_version
# ------------
# Echo version message to standard output and exit.
-# The version message is extracted from the calling file's header
-# comments, with leading '# ' stripped:
-# 1. First display the progname and version
-# 2. Followed by the header comment line matching /^# Written by /
-# 3. Then a blank line followed by the first following line matching
-# /^# Copyright /
-# 4. Immediately followed by any lines between the previous matches,
-# except lines preceding the intervening completely blank line.
-# For example, see the header comments of this file.
func_version ()
{
$debug_cmd
printf '%s\n' "$progname $scriptversion"
$SED -n '
- /^# Written by /!b
- s|^# ||; p; n
-
- :fwd2blnk
- /./ {
- n
- b fwd2blnk
+ /(C)/!b go
+ :more
+ /\./!{
+ N
+ s|\n# | |
+ b more
}
- p; n
-
- :holdwrnt
- s|^# ||
- s|^# *$||
- /^Copyright /!{
- /./H
- n
- b holdwrnt
+ :go
+ /^# Written by /,/# warranty; / {
+ s|^# ||
+ s|^# *$||
+ s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
+ p
}
-
- s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
- G
- s|\(\n\)\n*|\1|g
- p; q' < "$progpath"
+ /^# Written by / {
+ s|^# ||
+ p
+ }
+ /^warranty; /q' < "$progpath"
exit $?
}
@@ -2210,12 +1972,12 @@ func_version ()
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# 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.7'
+scriptversion='(GNU libtool) 2.4.6'
# func_echo ARG...
@@ -2306,7 +2068,7 @@ include the following information:
compiler: $LTCC
compiler flags: $LTCFLAGS
linker: $LD (gnu? $with_gnu_ld)
- version: $progname (GNU libtool) 2.4.7
+ version: $progname (GNU libtool) 2.4.6
automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
@@ -2362,7 +2124,7 @@ fi
# a configuration failure hint, and exit.
func_fatal_configuration ()
{
- func_fatal_error ${1+"$@"} \
+ func__fatal_error ${1+"$@"} \
"See the $PACKAGE documentation for more information." \
"Fatal configuration error."
}
@@ -2508,8 +2270,6 @@ libtool_options_prep ()
nonopt=
preserve_args=
- _G_rc_lt_options_prep=:
-
# Shorthand for --mode=foo, only valid as the first argument
case $1 in
clean|clea|cle|cl)
@@ -2533,16 +2293,11 @@ libtool_options_prep ()
uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
shift; set dummy --mode uninstall ${1+"$@"}; shift
;;
- *)
- _G_rc_lt_options_prep=false
- ;;
esac
- if $_G_rc_lt_options_prep; then
- # Pass back the list of options.
- func_quote eval ${1+"$@"}
- libtool_options_prep_result=$func_quote_result
- fi
+ # 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
@@ -2554,12 +2309,9 @@ libtool_parse_options ()
{
$debug_cmd
- _G_rc_lt_parse_options=false
-
# Perform our own loop to consume as many options as possible in
# each iteration.
while test $# -gt 0; do
- _G_match_lt_parse_options=:
_G_opt=$1
shift
case $_G_opt in
@@ -2634,20 +2386,15 @@ libtool_parse_options ()
func_append preserve_args " $_G_opt"
;;
- # An option not handled by this hook function:
- *) set dummy "$_G_opt" ${1+"$@"} ; shift
- _G_match_lt_parse_options=false
- break
- ;;
+ # An option not handled by this hook function:
+ *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
esac
- $_G_match_lt_parse_options && _G_rc_lt_parse_options=:
done
- if $_G_rc_lt_parse_options; then
- # save modified positional parameters for caller
- func_quote eval ${1+"$@"}
- libtool_parse_options_result=$func_quote_result
- fi
+
+ # 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
@@ -2704,8 +2451,8 @@ libtool_validate_options ()
}
# Pass back the unparsed argument list
- func_quote eval ${1+"$@"}
- libtool_validate_options_result=$func_quote_result
+ func_quote_for_eval ${1+"$@"}
+ libtool_validate_options_result=$func_quote_for_eval_result
}
func_add_hook func_validate_options libtool_validate_options
@@ -3671,8 +3418,8 @@ func_mode_compile ()
esac
done
- func_quote_arg pretty "$libobj"
- test "X$libobj" != "X$func_quote_arg_result" \
+ 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" "/" ""
@@ -3745,8 +3492,8 @@ compiler."
func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
srcfile=$func_to_tool_file_result
- func_quote_arg pretty "$srcfile"
- qsrcfile=$func_quote_arg_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
@@ -3901,8 +3648,7 @@ This mode accepts the following additional options:
-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
- -Xcompiler FLAG pass FLAG directly to the compiler
+ -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.
@@ -4008,8 +3754,6 @@ The following components of LINK-COMMAND are treated specially:
-weak LIBNAME declare that the target provides the LIBNAME interface
-Wc,FLAG
-Xcompiler FLAG pass linker-specific FLAG directly to the compiler
- -Wa,FLAG
- -Xassembler FLAG pass linker-specific FLAG directly to the assembler
-Wl,FLAG
-Xlinker FLAG pass linker-specific FLAG directly to the linker
-XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
@@ -4352,8 +4096,8 @@ func_mode_install ()
case $nonopt in *shtool*) :;; *) false;; esac
then
# Aesthetically quote it.
- func_quote_arg pretty "$nonopt"
- install_prog="$func_quote_arg_result "
+ func_quote_for_eval "$nonopt"
+ install_prog="$func_quote_for_eval_result "
arg=$1
shift
else
@@ -4363,8 +4107,8 @@ func_mode_install ()
# The real first argument should be the name of the installation program.
# Aesthetically quote it.
- func_quote_arg pretty "$arg"
- func_append install_prog "$func_quote_arg_result"
+ 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=: ;;
@@ -4421,12 +4165,12 @@ func_mode_install ()
esac
# Aesthetically quote the argument.
- func_quote_arg pretty "$arg"
- func_append install_prog " $func_quote_arg_result"
+ func_quote_for_eval "$arg"
+ func_append install_prog " $func_quote_for_eval_result"
if test -n "$arg2"; then
- func_quote_arg pretty "$arg2"
+ func_quote_for_eval "$arg2"
fi
- func_append install_shared_prog " $func_quote_arg_result"
+ func_append install_shared_prog " $func_quote_for_eval_result"
done
test -z "$install_prog" && \
@@ -4437,8 +4181,8 @@ func_mode_install ()
if test -n "$install_override_mode" && $no_mode; then
if $install_cp; then :; else
- func_quote_arg pretty "$install_override_mode"
- func_append install_shared_prog " -m $func_quote_arg_result"
+ func_quote_for_eval "$install_override_mode"
+ func_append install_shared_prog " -m $func_quote_for_eval_result"
fi
fi
@@ -4734,8 +4478,8 @@ func_mode_install ()
relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
$opt_quiet || {
- func_quote_arg expand,pretty "$relink_command"
- eval "func_echo $func_quote_arg_result"
+ func_quote_for_expand "$relink_command"
+ eval "func_echo $func_quote_for_expand_result"
}
if eval "$relink_command"; then :
else
@@ -5514,8 +5258,7 @@ else
if test \"\$libtool_execute_magic\" != \"$magic\"; then
file=\"\$0\""
- func_quote_arg pretty "$ECHO"
- qECHO=$func_quote_arg_result
+ qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
$ECHO "\
# A function that is used when there is no print builtin or printf.
@@ -5525,7 +5268,7 @@ func_fallback_echo ()
\$1
_LTECHO_EOF'
}
- ECHO=$qECHO
+ ECHO=\"$qECHO\"
fi
# Very basic option parsing. These options are (a) specific to
@@ -6868,9 +6611,9 @@ func_mode_link ()
while test "$#" -gt 0; do
arg=$1
shift
- func_quote_arg pretty,unquoted "$arg"
- qarg=$func_quote_arg_unquoted_result
- func_append libtool_args " $func_quote_arg_result"
+ 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
@@ -7106,13 +6849,6 @@ func_mode_link ()
prev=
continue
;;
- xassembler)
- func_append compiler_flags " -Xassembler $qarg"
- prev=
- func_append compile_command " -Xassembler $qarg"
- func_append finalize_command " -Xassembler $qarg"
- continue
- ;;
xcclinker)
func_append linker_flags " $qarg"
func_append compiler_flags " $qarg"
@@ -7283,7 +7019,7 @@ func_mode_link ()
# These systems don't actually have a C library (as such)
test X-lc = "X$arg" && continue
;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
# Do not include libc due to us having libc/libc_r.
test X-lc = "X$arg" && continue
;;
@@ -7303,7 +7039,7 @@ func_mode_link ()
esac
elif test X-lc_r = "X$arg"; then
case $host in
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
# Do not include libc_r directly, use -pthread flag.
continue
;;
@@ -7333,20 +7069,8 @@ func_mode_link ()
prev=xcompiler
continue
;;
- # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199.
- -pthread)
- case $host in
- *solaris2*) ;;
- *)
- case "$new_inherited_linker_flags " in
- *" $arg "*) ;;
- * ) func_append new_inherited_linker_flags " $arg" ;;
- esac
- ;;
- esac
- continue
- ;;
- -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \
+
+ -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"
@@ -7487,9 +7211,9 @@ func_mode_link ()
save_ifs=$IFS; IFS=,
for flag in $args; do
IFS=$save_ifs
- func_quote_arg pretty "$flag"
- func_append arg " $func_quote_arg_result"
- func_append compiler_flags " $func_quote_arg_result"
+ 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"
@@ -7503,21 +7227,16 @@ func_mode_link ()
save_ifs=$IFS; IFS=,
for flag in $args; do
IFS=$save_ifs
- func_quote_arg pretty "$flag"
- func_append arg " $wl$func_quote_arg_result"
- func_append compiler_flags " $wl$func_quote_arg_result"
- func_append linker_flags " $func_quote_arg_result"
+ 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
;;
- -Xassembler)
- prev=xassembler
- continue
- ;;
-
-Xcompiler)
prev=xcompiler
continue
@@ -7535,8 +7254,8 @@ func_mode_link ()
# -msg_* for osf cc
-msg_*)
- func_quote_arg pretty "$arg"
- arg=$func_quote_arg_result
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
;;
# Flags to be passed through unchanged, with rationale:
@@ -7553,17 +7272,12 @@ func_mode_link ()
# -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
- # -fuse-ld=* Linker select flags for GCC
- # -Wa,* Pass flags directly to the assembler
-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=*|-fuse-ld=*|-Wa,*)
- func_quote_arg pretty "$arg"
- arg=$func_quote_arg_result
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
+ 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"
@@ -7584,15 +7298,15 @@ func_mode_link ()
continue
else
# Otherwise treat like 'Some other compiler flag' below
- func_quote_arg pretty "$arg"
- arg=$func_quote_arg_result
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
fi
;;
# Some other compiler flag.
-* | +*)
- func_quote_arg pretty "$arg"
- arg=$func_quote_arg_result
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
;;
*.$objext)
@@ -7712,8 +7426,8 @@ func_mode_link ()
*)
# Unknown arguments in both finalize_command and compile_command need
# to be aesthetically quoted because they are evaled later.
- func_quote_arg pretty "$arg"
- arg=$func_quote_arg_result
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
;;
esac # arg
@@ -8918,7 +8632,7 @@ func_mode_link ()
test CXX = "$tagname" && {
case $host_os in
linux*)
- case `$CC -V 2>&1 | $SED 5q` in
+ case `$CC -V 2>&1 | sed 5q` in
*Sun\ C*) # Sun C++ 5.9
func_suncc_cstd_abi
@@ -9091,7 +8805,7 @@ func_mode_link ()
#
case $version_type in
# correct linux to gnu/linux during the next big refactor
- darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none)
+ darwin|freebsd-elf|linux|osf|windows|none)
func_arith $number_major + $number_minor
current=$func_arith_result
age=$number_minor
@@ -9182,7 +8896,7 @@ func_mode_link ()
versuffix=.$current.$revision
;;
- freebsd-elf | midnightbsd-elf)
+ freebsd-elf)
func_arith $current - $age
major=.$func_arith_result
versuffix=$major.$age.$revision
@@ -9408,7 +9122,7 @@ func_mode_link ()
*-*-netbsd*)
# Don't link with libc until the a.out ld.so is fixed.
;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
# Do not include libc due to us having libc/libc_r.
;;
*-*-sco3.2v5* | *-*-sco5v6*)
@@ -10219,8 +9933,8 @@ EOF
for cmd in $concat_cmds; do
IFS=$save_ifs
$opt_quiet || {
- func_quote_arg expand,pretty "$cmd"
- eval "func_echo $func_quote_arg_result"
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
}
$opt_dry_run || eval "$cmd" || {
lt_exit=$?
@@ -10313,8 +10027,8 @@ EOF
eval cmd=\"$cmd\"
IFS=$save_ifs
$opt_quiet || {
- func_quote_arg expand,pretty "$cmd"
- eval "func_echo $func_quote_arg_result"
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
}
$opt_dry_run || eval "$cmd" || {
lt_exit=$?
@@ -10788,13 +10502,12 @@ EOF
elif eval var_value=\$$var; test -z "$var_value"; then
relink_command="$var=; export $var; $relink_command"
else
- func_quote_arg pretty "$var_value"
- relink_command="$var=$func_quote_arg_result; export $var; $relink_command"
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
fi
done
- func_quote eval cd "`pwd`"
- func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)"
- relink_command=$func_quote_arg_unquoted_result
+ 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.
@@ -11034,15 +10747,13 @@ EOF
elif eval var_value=\$$var; test -z "$var_value"; then
relink_command="$var=; export $var; $relink_command"
else
- func_quote_arg pretty,unquoted "$var_value"
- relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command"
+ 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.
- func_quote eval cd "`pwd`"
- relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
- func_quote_arg pretty,unquoted "$relink_command"
- relink_command=$func_quote_arg_unquoted_result
+ 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
diff --git a/configure b/configure
index f0146dd..090101d 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for libHX 4.14.
+# Generated by GNU Autoconf 2.71 for libHX 4.17.
#
#
# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
@@ -618,8 +618,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='libHX'
PACKAGE_TARNAME='libhx'
-PACKAGE_VERSION='4.14'
-PACKAGE_STRING='libHX 4.14'
+PACKAGE_VERSION='4.17'
+PACKAGE_STRING='libHX 4.17'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -686,7 +686,6 @@ MANIFEST_TOOL
RANLIB
DLLTOOL
OBJDUMP
-FILECMD
LN_S
NM
ac_ct_DUMPBIN
@@ -1375,7 +1374,7 @@ 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 libHX 4.14 to adapt to many kinds of systems.
+\`configure' configures libHX 4.17 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1446,7 +1445,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of libHX 4.14:";;
+ short | recursive ) echo "Configuration of libHX 4.17:";;
esac
cat <<\_ACEOF
@@ -1561,7 +1560,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-libHX configure 4.14
+libHX configure 4.17
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2195,7 +2194,7 @@ 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 libHX $as_me 4.14, which was
+It was created by libHX $as_me 4.17, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -3684,7 +3683,7 @@ fi
# Define the identity of the package.
PACKAGE='libhx'
- VERSION='4.14'
+ VERSION='4.17'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -5894,38 +5893,6 @@ unknown)
;;
esac
-# 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=no
-fi
-
-
-
-
-
-
-
-
-
case `pwd` in
*\ * | *\ *)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
@@ -5934,8 +5901,8 @@ esac
-macro_version='2.4.7'
-macro_revision='2.4.7'
+macro_version='2.4.6'
+macro_revision='2.4.6'
@@ -6563,13 +6530,13 @@ else
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
+ 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
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
*/dev/null*)
lt_cv_path_NM="$tmp_nm -p"
break 2
@@ -6707,7 +6674,7 @@ esac
fi
fi
- case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
+ case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
*COFF*)
DUMPBIN="$DUMPBIN -symbols -headers"
;;
@@ -6811,7 +6778,7 @@ else $as_nop
lt_cv_sys_max_cmd_len=8192;
;;
- bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
+ 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`
@@ -6854,7 +6821,7 @@ else $as_nop
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/.*[ ]//'`
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
else
lt_cv_sys_max_cmd_len=32768
fi
@@ -7060,114 +7027,6 @@ esac
if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args.
-set dummy ${ac_tool_prefix}file; 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_FILECMD+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- if test -n "$FILECMD"; then
- ac_cv_prog_FILECMD="$FILECMD" # 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_FILECMD="${ac_tool_prefix}file"
- 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
-FILECMD=$ac_cv_prog_FILECMD
-if test -n "$FILECMD"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5
-printf "%s\n" "$FILECMD" >&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_FILECMD"; then
- ac_ct_FILECMD=$FILECMD
- # Extract the first word of "file", so it can be a program name with args.
-set dummy file; 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_FILECMD+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- if test -n "$ac_ct_FILECMD"; then
- ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # 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_FILECMD="file"
- 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_FILECMD=$ac_cv_prog_ac_ct_FILECMD
-if test -n "$ac_ct_FILECMD"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5
-printf "%s\n" "$ac_ct_FILECMD" >&6; }
-else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-fi
-
- if test "x$ac_ct_FILECMD" = x; then
- FILECMD=":"
- 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
- FILECMD=$ac_ct_FILECMD
- fi
-else
- FILECMD="$ac_cv_prog_FILECMD"
-fi
-
-
-
-
-
-
-
-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
@@ -7310,7 +7169,7 @@ beos*)
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='$FILECMD -L'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
lt_cv_file_magic_test_file=/shlib/libc.so
;;
@@ -7344,14 +7203,14 @@ darwin* | rhapsody*)
lt_cv_deplibs_check_method=pass_all
;;
-freebsd* | dragonfly* | midnightbsd*)
+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=$FILECMD
+ lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
esac
@@ -7365,7 +7224,7 @@ haiku*)
;;
hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=$FILECMD
+ 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'
@@ -7412,7 +7271,7 @@ netbsd*)
newos6*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=$FILECMD
+ lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
@@ -7785,29 +7644,13 @@ esac
fi
: ${AR=ar}
+: ${AR_FLAGS=cru}
-# Use ARFLAGS variable as AR's operation code to sync the variable naming with
-# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
-# higher priority because thats what people were doing historically (setting
-# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS
-# variable obsoleted/removed.
-
-test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
-lt_ar_flags=$AR_FLAGS
-
-
-
-
-
-
-# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override
-# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
-
@@ -8224,7 +8067,7 @@ 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'"
+ 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'"
@@ -8242,20 +8085,20 @@ 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_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_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_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'"\
@@ -8279,7 +8122,7 @@ for ac_symprfx in "" "_"; do
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++ or ICC,
+ # Also find C++ and __fastcall symbols from MSVC++,
# which start with @ or ?.
lt_cv_sys_global_symbol_pipe="$AWK '"\
" {last_section=section; section=\$ 3};"\
@@ -8297,9 +8140,9 @@ for ac_symprfx in "" "_"; do
" 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'"
+ 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'"
+ 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
@@ -8502,7 +8345,7 @@ case $with_sysroot in #(
fi
;; #(
/*)
- lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
+ lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
;; #(
no|'')
;; #(
@@ -8627,7 +8470,7 @@ ia64-*-hpux*)
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- case `$FILECMD conftest.$ac_objext` in
+ case `/usr/bin/file conftest.$ac_objext` in
*ELF-32*)
HPUX_IA64_MODE=32
;;
@@ -8648,7 +8491,7 @@ ia64-*-hpux*)
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 `$FILECMD conftest.$ac_objext` in
+ case `/usr/bin/file conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -melf32bsmip"
;;
@@ -8660,7 +8503,7 @@ ia64-*-hpux*)
;;
esac
else
- case `$FILECMD conftest.$ac_objext` in
+ case `/usr/bin/file conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -32"
;;
@@ -8686,7 +8529,7 @@ mips64*-*linux*)
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
emul=elf
- case `$FILECMD conftest.$ac_objext` in
+ case `/usr/bin/file conftest.$ac_objext` in
*32-bit*)
emul="${emul}32"
;;
@@ -8694,7 +8537,7 @@ mips64*-*linux*)
emul="${emul}64"
;;
esac
- case `$FILECMD conftest.$ac_objext` in
+ case `/usr/bin/file conftest.$ac_objext` in
*MSB*)
emul="${emul}btsmip"
;;
@@ -8702,7 +8545,7 @@ mips64*-*linux*)
emul="${emul}ltsmip"
;;
esac
- case `$FILECMD conftest.$ac_objext` in
+ case `/usr/bin/file conftest.$ac_objext` in
*N32*)
emul="${emul}n32"
;;
@@ -8726,14 +8569,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- case `$FILECMD conftest.o` in
+ 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 `$FILECMD conftest.o` in
+ case `/usr/bin/file conftest.o` in
*x86-64*)
LD="${LD-ld} -m elf32_x86_64"
;;
@@ -8841,7 +8684,7 @@ printf "%s\n" "$lt_cv_cc_needs_belf" >&6; }
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- case `$FILECMD conftest.o` in
+ case `/usr/bin/file conftest.o` in
*64-bit*)
case $lt_cv_prog_gnu_ld in
yes*)
@@ -9624,8 +9467,8 @@ 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 $AR_FLAGS libconftest.a conftest.o" >&5
- $AR $AR_FLAGS libconftest.a conftest.o 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
@@ -9652,12 +9495,17 @@ printf "%s\n" "$lt_cv_ld_force_load" >&6; }
_lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
darwin1.*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- darwin*)
- case $MACOSX_DEPLOYMENT_TARGET,$host in
- 10.[012],*|,*powerpc*-darwin[5-8]*)
- _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- *)
- _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ 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
@@ -9765,6 +9613,36 @@ func_stripname_cnf ()
# Set options
+# 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=no
+fi
+
+
+
+
+
+
+
@@ -10025,8 +9903,8 @@ esac
ofile=libtool
can_build_shared=yes
-# All known linkers require a '.a' archive for static linking (except MSVC and
-# ICC, which need '.lib').
+# 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
@@ -10538,7 +10416,7 @@ lt_prog_compiler_static=
lt_prog_compiler_static='-qstaticlink'
;;
*)
- case `$CC -V 2>&1 | $SED 5q` in
+ 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'
@@ -10961,15 +10839,15 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
case $host_os in
cygwin* | mingw* | pw32* | cegcc*)
- # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+ # 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++ or Intel C++ Compiler.
+ # 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++ or ICC)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
with_gnu_ld=yes
;;
openbsd* | bitrig*)
@@ -11021,7 +10899,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
whole_archive_flag_spec=
fi
supports_anon_versioning=no
- case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
+ 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 ...
@@ -11133,7 +11011,6 @@ _LT_EOF
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
- file_list_spec='@'
;;
interix[3-9]*)
@@ -11148,7 +11025,7 @@ _LT_EOF
# 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'
+ 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)
@@ -11191,7 +11068,7 @@ _LT_EOF
compiler_needs_object=yes
;;
esac
- case `$CC -V 2>&1 | $SED 5q` in
+ 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
@@ -11203,7 +11080,7 @@ _LT_EOF
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~
+ 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
@@ -11219,7 +11096,7 @@ _LT_EOF
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~
+ 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
@@ -11351,7 +11228,7 @@ _LT_EOF
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 == "L") || (\$ 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'
+ 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
@@ -11622,12 +11499,12 @@ fi
cygwin* | mingw* | pw32* | cegcc*)
# When not using gcc, we currently assume that we are using
- # Microsoft Visual C++ or Intel C++ Compiler.
+ # Microsoft Visual C++.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
case $cc_basename in
- cl* | icl*)
- # Native MSVC or ICC
+ cl*)
+ # Native MSVC
hardcode_libdir_flag_spec=' '
allow_undefined_flag=unsupported
always_export_symbols=yes
@@ -11668,7 +11545,7 @@ fi
fi'
;;
*)
- # Assume MSVC and ICC wrapper
+ # Assume MSVC wrapper
hardcode_libdir_flag_spec=' '
allow_undefined_flag=unsupported
# Tell ltmain to make .lib files, not .a files.
@@ -11709,8 +11586,8 @@ fi
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"
+ 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
@@ -11744,7 +11621,7 @@ fi
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly* | midnightbsd*)
+ freebsd* | dragonfly*)
archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
@@ -11995,7 +11872,6 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
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
- file_list_spec='@'
;;
osf3*)
@@ -12688,7 +12564,7 @@ cygwin* | mingw* | pw32* | cegcc*)
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'
+ 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"
;;
@@ -12698,14 +12574,14 @@ cygwin* | mingw* | pw32* | cegcc*)
;;
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'
+ 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* | *,icl*)
- # Native MSVC or ICC
+ *,cl*)
+ # Native MSVC
libname_spec='$name'
soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
library_names_spec='$libname.dll.lib'
@@ -12724,7 +12600,7 @@ cygwin* | mingw* | pw32* | cegcc*)
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|^ ||'`
+ 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
@@ -12761,7 +12637,7 @@ cygwin* | mingw* | pw32* | cegcc*)
;;
*)
- # Assume MSVC and ICC wrapper
+ # Assume MSVC wrapper
library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
dynamic_linker='Win32 ld.exe'
;;
@@ -12794,7 +12670,7 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
-freebsd* | dragonfly* | midnightbsd*)
+freebsd* | dragonfly*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
if test -x /usr/bin/objformat; then
@@ -13947,41 +13823,30 @@ 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 -z "$STRIP"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-else
- if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
- old_striplib="$STRIP --strip-debug"
- striplib="$STRIP --strip-unneeded"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+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
- case $host_os in
- darwin*)
- # FIXME - insert some real tests, host_os isn't really good enough
+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; }
- ;;
- freebsd*)
- if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
- old_striplib="$STRIP --strip-debug"
- striplib="$STRIP --strip-unneeded"
- { 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
- ;;
- *)
+ else
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
- ;;
- esac
- fi
+ fi
+ ;;
+ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ ;;
+ esac
fi
@@ -14751,8 +14616,8 @@ fi
cygwin* | mingw* | pw32* | cegcc*)
case $GXX,$cc_basename in
- ,cl* | no,cl* | ,icl* | no,icl*)
- # Native MSVC or ICC
+ ,cl* | no,cl*)
+ # Native MSVC
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec_CXX=' '
@@ -14843,11 +14708,11 @@ fi
output_verbose_link_cmd=func_echo_all
archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
- archive_expsym_cmds_CXX="$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_CXX="$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"
+ archive_expsym_cmds_CXX="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_CXX="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"
if test yes != "$lt_cv_apple_cc_single_mod"; then
archive_cmds_CXX="\$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"
- archive_expsym_cmds_CXX="$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"
+ archive_expsym_cmds_CXX="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
@@ -14882,7 +14747,6 @@ fi
emximp -o $lib $output_objdir/$libname.def'
old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
enable_shared_with_static_runtimes_CXX=yes
- file_list_spec_CXX='@'
;;
dgux*)
@@ -14913,7 +14777,7 @@ fi
archive_cmds_need_lc_CXX=no
;;
- freebsd* | dragonfly* | midnightbsd*)
+ freebsd* | dragonfly*)
# FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
# conventions
ld_shlibs_CXX=yes
@@ -15050,7 +14914,7 @@ fi
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
archive_cmds_CXX='$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_CXX='$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'
+ archive_expsym_cmds_CXX='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
@@ -15190,13 +15054,13 @@ fi
archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
if test yes = "$supports_anon_versioning"; then
archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $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
+ case `$CC -V 2>&1 | sed 5q` in
*Sun\ C*)
# Sun C++ 5.9
no_undefined_flag_CXX=' -zdefs'
@@ -15853,7 +15717,7 @@ lt_prog_compiler_static_CXX=
;;
esac
;;
- freebsd* | dragonfly* | midnightbsd*)
+ freebsd* | dragonfly*)
# FreeBSD uses GNU C++
;;
hpux9* | hpux10* | hpux11*)
@@ -15936,7 +15800,7 @@ lt_prog_compiler_static_CXX=
lt_prog_compiler_static_CXX='-qstaticlink'
;;
*)
- case `$CC -V 2>&1 | $SED 5q` in
+ case `$CC -V 2>&1 | sed 5q` in
*Sun\ C*)
# Sun C++ 5.9
lt_prog_compiler_pic_CXX='-KPIC'
@@ -16323,7 +16187,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
export_symbols_cmds_CXX='$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_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 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'
+ export_symbols_cmds_CXX='`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*)
@@ -16331,7 +16195,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
;;
cygwin* | mingw* | cegcc*)
case $cc_basename in
- cl* | icl*)
+ cl*)
exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
;;
*)
@@ -16679,7 +16543,7 @@ cygwin* | mingw* | pw32* | cegcc*)
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'
+ soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
;;
mingw* | cegcc*)
@@ -16688,14 +16552,14 @@ cygwin* | mingw* | pw32* | cegcc*)
;;
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'
+ 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* | *,icl*)
- # Native MSVC or ICC
+ *,cl*)
+ # Native MSVC
libname_spec='$name'
soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
library_names_spec='$libname.dll.lib'
@@ -16714,7 +16578,7 @@ cygwin* | mingw* | pw32* | cegcc*)
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|^ ||'`
+ 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
@@ -16751,7 +16615,7 @@ cygwin* | mingw* | pw32* | cegcc*)
;;
*)
- # Assume MSVC and ICC wrapper
+ # Assume MSVC wrapper
library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
dynamic_linker='Win32 ld.exe'
;;
@@ -16783,7 +16647,7 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
-freebsd* | dragonfly* | midnightbsd*)
+freebsd* | dragonfly*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
if test -x /usr/bin/objformat; then
@@ -18771,7 +18635,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by libHX $as_me 4.14, which was
+This file was extended by libHX $as_me 4.17, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -18839,7 +18703,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-libHX config.status 4.14
+libHX config.status 4.17
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
@@ -18968,9 +18832,9 @@ AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
sed_quote_subst='$sed_quote_subst'
double_quote_subst='$double_quote_subst'
delay_variable_subst='$delay_variable_subst'
-enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
enable_shared='`$ECHO "$enable_shared" | $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"`'
@@ -19002,7 +18866,6 @@ lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_q
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"`'
-FILECMD='`$ECHO "$FILECMD" | $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"`'
@@ -19011,7 +18874,6 @@ 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"`'
-lt_ar_flags='`$ECHO "$lt_ar_flags" | $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"`'
@@ -19186,7 +19048,6 @@ LN_S \
lt_SP2NL \
lt_NL2SP \
reload_flag \
-FILECMD \
OBJDUMP \
deplibs_check_method \
file_magic_cmd \
@@ -19195,6 +19056,7 @@ want_nocaseglob \
DLLTOOL \
sharedlib_from_linklib_cmd \
AR \
+AR_FLAGS \
archiver_list_spec \
STRIP \
RANLIB \
@@ -20100,13 +19962,13 @@ available_tags='CXX '
# ### BEGIN LIBTOOL CONFIG
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
# Which release of libtool.m4 was used?
macro_version=$macro_version
macro_revision=$macro_revision
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
# Whether or not to build shared libraries.
build_libtool_libs=$enable_shared
@@ -20183,9 +20045,6 @@ 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
-# A file(cmd) program that detects file types.
-FILECMD=$lt_FILECMD
-
# An object symbol dumper.
OBJDUMP=$lt_OBJDUMP
@@ -20210,11 +20069,8 @@ sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
# The archiver.
AR=$lt_AR
-# Flags to create an archive (by configure).
-lt_ar_flags=$lt_ar_flags
-
# Flags to create an archive.
-AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"}
+AR_FLAGS=$lt_AR_FLAGS
# How to feed a file listing to the archiver.
archiver_list_spec=$lt_archiver_list_spec
@@ -20604,7 +20460,7 @@ ltmain=$ac_aux_dir/ltmain.sh
# 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" \
+ sed '$q' "$ltmain" >> "$cfgfile" \
|| (rm -f "$cfgfile"; exit 1)
mv -f "$cfgfile" "$ofile" ||
diff --git a/configure.ac b/configure.ac
index 92c72c7..bb658ea 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([libHX], [4.14])
+AC_INIT([libHX], [4.17])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
@@ -10,8 +10,7 @@ AM_PROG_CC_C_O
AC_PROG_CXX
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
-AC_DISABLE_STATIC
-AM_PROG_LIBTOOL
+LT_INIT([disable-static])
saved_CXXFLAGS="$CXXFLAGS"
regular_CPPFLAGS="-D_FILE_OFFSET_BITS=64 -D_REENTRANT"
diff --git a/debian/changelog b/debian/changelog
index 429ee49..fe8f574 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+libhx (4.17-1) unstable; urgency=medium
+
+ * New upstream release.
+ - Refresh symbols files.
+
+ -- Jörg Frings-Fürst <debian@jff.email> Tue, 21 Nov 2023 10:41:07 +0100
+
libhx (4.14-1) unstable; urgency=medium
* New upstream release.
diff --git a/debian/files b/debian/files
deleted file mode 100644
index bd8c150..0000000
--- a/debian/files
+++ /dev/null
@@ -1 +0,0 @@
-libhx_4.14-1_source.buildinfo libs optional
diff --git a/debian/libhx-dev.symbols b/debian/libhx-dev.symbols
index a054c0f..6469e5c 100644
--- a/debian/libhx-dev.symbols
+++ b/debian/libhx-dev.symbols
@@ -3,6 +3,8 @@ libHX_rtcheck.so libhx-dev #MINVER#
LIBHX_3.25@LIBHX_3.25 3.25
LIBHX_3.27@LIBHX_3.27 4.7
LIBHX_4.11@LIBHX_4.11 4.12
+ LIBHX_4.15@LIBHX_4.15 4.17
+ LIBHX_4.16@LIBHX_4.16 4.17
LIBHX_4.2@LIBHX_4.2 4.7
LIBHX_4.3@LIBHX_4.3 4.7
LIBHX_4.9@LIBHX_4.9 4.10
diff --git a/debian/libhx32.symbols b/debian/libhx32.symbols
index 539b90e..f2abcd6 100644
--- a/debian/libhx32.symbols
+++ b/debian/libhx32.symbols
@@ -14,6 +14,8 @@ libHX.so.32 libhx32 #MINVER#
HX_drand@LIBHX_3.25 3.25
HX_exit@LIBHX_3.25 3.25
HX_ffs@LIBHX_3.25 3.25
+ HX_flpr@LIBHX_4.15 4.17
+ HX_flprf@LIBHX_4.15 4.17
HX_fls@LIBHX_3.25 3.25
HX_getl@LIBHX_3.25 3.25
HX_getopt@LIBHX_3.25 3.25
@@ -66,6 +68,7 @@ libHX.so.32 libhx32 #MINVER#
HX_strsep2@LIBHX_3.25 3.25
HX_strsep@LIBHX_3.25 3.25
HX_strtod_unit@LIBHX_4.2 4.7
+ HX_strtoull_nsec@LIBHX_4.16 4.17
HX_strtoull_sec@LIBHX_4.3 4.7
HX_strtoull_unit@LIBHX_4.2 4.7
HX_strupper@LIBHX_3.25 3.25
@@ -147,6 +150,8 @@ libHX.so.32 libhx32 #MINVER#
LIBHX_3.25@LIBHX_3.25 3.25
LIBHX_3.27@LIBHX_3.27 4.7
LIBHX_4.11@LIBHX_4.11 4.12
+ LIBHX_4.15@LIBHX_4.15 4.17
+ LIBHX_4.16@LIBHX_4.16 4.17
LIBHX_4.2@LIBHX_4.2 4.7
LIBHX_4.3@LIBHX_4.3 4.7
LIBHX_4.9@LIBHX_4.9 4.10
diff --git a/doc/api.rst b/doc/api.rst
index 5a3efe5..a645fdd 100644
--- a/doc/api.rst
+++ b/doc/api.rst
@@ -9,6 +9,9 @@ Function reference
====== ====== ====== ========================================
RMV MinVer FirstA Name
====== ====== ====== ========================================
+4.16 4.16 4.16 HX_strtoull_nsec
+4.15 4.15 4.15 HX_flpr
+4.15 4.15 4.15 HX_flprf
4.11 4.11 4.11 HX_addrport_split
4.11 4.11 4.11 HX_inet_connect
4.11 4.11 4.11 HX_inet_listen
diff --git a/doc/changelog.rst b/doc/changelog.rst
index 26c4d06..2e0cf0f 100644
--- a/doc/changelog.rst
+++ b/doc/changelog.rst
@@ -1,9 +1,39 @@
+v4.17 (2023-11-12)
+==================
+
+Changes:
+
+* socket: set SOCK_CLOEXEC on all sockets
+
+
+v4.16 (2023-11-02)
+==================
+
+Enhancements:
+
+* Add ``HX_strtoull_nsec`` to parse time period and emit nanoseconds
+* doc: specify return value and semantics for ``HXio_fullread``,
+ ``HXio_fullwrite``, ``HX_sendfile``
+
+
+v4.15 (2023-09-24)
+==================
+
+Enhancements:
+
+* Add functions to compute Least Positive Residue (``HX_flpr``, ``HX_flprf``)
+
+Fixes:
+
+* Make ``HX_strrtrim`` work on strings longer than ``INT_MAX``
+
+
v4.14 (2023-07-14)
==================
Fixes:
-* socket: make HX_addrport_split work on portless bracketed hostspec
+* socket: make ``HX_addrport_split`` work on portless bracketed hostspec
v4.13 (2023-06-21)
@@ -11,8 +41,8 @@ v4.13 (2023-06-21)
Fixes:
-* io: do not fail HX_mkdir when a component is a symlink to a directory
-* xml_helper: fix infinite recursion in xml_getnsprop
+* io: do not fail ``HX_mkdir`` when a component is a symlink to a directory
+* xml_helper: fix infinite recursion in ``xml_getnsprop``
v4.12 (2023-02-27)
@@ -20,7 +50,7 @@ v4.12 (2023-02-27)
Fixes:
-* Plug a memory leak in HX_inet_listen
+* Plug a memory leak in ``HX_inet_listen``
v4.11 (2023-02-26)
@@ -28,8 +58,8 @@ v4.11 (2023-02-26)
Enhancements:
-* socket: add HX_addrport_split, HX_inet_connect, HX_inet_listen,
- HX_local_listen
+* socket: add ``HX_addrport_split``, ``HX_inet_connect``, ``HX_inet_listen``,
+ ``HX_local_listen``
v4.10 (2023-01-29)
@@ -37,7 +67,7 @@ v4.10 (2023-01-29)
Fixes:
-* format: plug a memory leak relating to func_entry_clone
+* format: plug a memory leak relating to ``func_entry_clone``
* Resolve mingw build failure
@@ -46,13 +76,14 @@ v4.9 (2023-01-23)
Enhancements:
-* socket: add sockaddr_is_local, ipaddr_is_local functions
+* socket: add ``sockaddr_is_local``, ``ipaddr_is_local`` functions
Fixes:
-* format: avoid return value truncation from HXformat_aprintf, HXformat_sprintf
-* format: avoid calling HXmc_length on a non-hxmc object
-* format: add new variations of printf functions returning ssize_t
+* format: avoid return value truncation from ``HXformat_aprintf``,
+ ``HXformat_sprintf``
+* format: avoid calling ``HXmc_length`` on a non-hxmc object
+* format: add new variations of printf functions returning ``ssize_t``
* Resolve Coverity-SCAN reports
@@ -61,7 +92,7 @@ v4.8 (2022-12-03)
Enhancements:
-* io: call posix_fadvise when slurping files
+* io: call ``posix_fadvise`` when slurping files
Fixes:
@@ -73,11 +104,11 @@ v4.7 (2022-10-21)
Enhancements:
-* string: new quoting modes HXQUOTE_BASE64URL & HXQUOTE_BASE64IMAP
+* string: new quoting modes ``HXQUOTE_BASE64URL`` & ``HXQUOTE_BASE64IMAP``
Fixes:
-* socket: make HX_socket_from_env functional on OpenBSD
+* socket: make ``HX_socket_from_env`` functional on OpenBSD
v4.6 (2022-06-27)
@@ -85,8 +116,8 @@ v4.6 (2022-06-27)
Enhancements:
-* HX_slurp_fd/HX_slurp_file now supports reading from files reporting their
- own size as 0 (e.g. ttys, /proc special files).
+* ``HX_slurp_fd``/``HX_slurp_file`` now supports reading from files reporting
+ their own size as 0 (e.g. ttys, ``/proc`` special files).
v4.5 (2022-04-10)
@@ -132,8 +163,8 @@ v4.1 (2021-10-13)
Fixes:
-* io: fix a use-after-free in conjunction with HX_realpath /
- fix missing NULLing of a pointer within HX_readlink
+* io: fix a use-after-free in conjunction with ``HX_realpath`` /
+ fix missing NULLing of a pointer within ``HX_readlink``
v4.0 (2021-10-03)
diff --git a/doc/files_and_dirs.rst b/doc/files_and_dirs.rst
index a4fdc59..a18b5a4 100644
--- a/doc/files_and_dirs.rst
+++ b/doc/files_and_dirs.rst
@@ -180,11 +180,44 @@ Filedescriptor helpers
ssize_t HXio_fullwrite(int fd, const void *buf, size_t size, unsigned int flags);
ssize_t HX_sendfile(int dst, int src, size_t count);
-Since plain ``read``(2) and ``write``(2) may process only part of the buffer —
-even more likely so with sockets —, libHX provides two functions that calls
-these in a loop to retry said operations until the full amount has been
-processed. Since read and write can also be used with socket file descriptors,
-so can these.
+``HXio_fullread`` calls ``read``(2) in a loop so long as to completely read
+``size`` bytes, and thereby masking short read behavior that the *read* system
+call is allowed to exhibit. On success, the return value indicates the number
+of bytes read, which may be shorter than ``size`` if EOF was encountered. On
+error, the return value is negative (but no particular one value).
+
+``HXio_fullwrite`` calls ``write``(2) in a loop so long as to completely write
+``size`` bytes, and thereby masking short write behavior that the *write*
+system call is allowed to exhibit. On success, the return value is the same as
+``size``, as there is never an EOF condition for writes. On error, the return
+value is negative.
+
+There is no way with just HXio_fullwrite to know the number of bytes that were
+read up to the point that the error occurred. This was a subconscious design
+choice in 2010. The reasoning (as of 2023) goes: If the file descriptor is not
+seekable, like a socket or pipe, what are you going to do anyway but abort? You
+cannot recall the data that was sent, the peer already knows how much was sent
+thanks to their socket interface. The peer also either caused the abort itself
+(e.g. by closing the read end of a pipe), or is made aware of connection
+severing (will see EOF). If the file descriptor is seekable, there is no "peer"
+and one can ``lseek`` back and retract the data.
+
+The HXio_fullread API mirrors that of HXio_fullwrite for API consistency. Input
+is often discarded and an error shown instead. However, we acknowledge there
+might be a legitimate case (e.g. wanting to render an incoming image even if
+incomplete), but in this case, HXio_fullread is not for you.
``HX_sendfile`` wraps ``sendfile``(2) for the same reason; in addition, it
falls back to a read-write loop on platforms which do not offer sendfile.
+``HX_sendfile`` will transfer at most ``SSIZE_MAX`` bytes in one call. A user
+wishing to emit somewhat more (e.g. still less than ``SIZE_MAX``) will have to
+write a loop around HXio_sendfile, just like for sendfile. On success, the
+return value is the request number of bytes. On error, the return value may be
+a negative errno (``errno`` is set too), or it may be the number of bytes from
+a partially-completed send.
+
+ .. code-block:: c
+
+ ssize_t ret = HX_sendfile(dst, src, count);
+ if (ret < 0 || (ssize_t)ret < count)
+ fprintf(stderr, "sendfile: %s\n", strerror(errno));
diff --git a/doc/misc_functions.rst b/doc/misc_functions.rst
index 43dacfe..c988f37 100644
--- a/doc/misc_functions.rst
+++ b/doc/misc_functions.rst
@@ -8,6 +8,8 @@ Miscellaneous functions
int HX_ffs(unsigned long z);
int HX_fls(unsigned long z);
+ float HX_flprf(float x, float y);
+ double HX_flpr(double x, double y);
void HX_zvecfree(char **);
unsigned int HX_zveclen(const char *const *);
@@ -20,6 +22,9 @@ Miscellaneous functions
Finds the last (most-significant) bit in a value and returns its
position, or ``-1`` to indicate failure.
+``HX_flpr``, ``HX_flprf``
+ Computes the Least Positive Residue of the modulo operation x % y.
+
``HX_zvecfree``
Frees the supplied Z-vector array. (Frees all array elements from the
first element to (excluding) the first ``NULL`` element.)
diff --git a/doc/process_management.rst b/doc/process_management.rst
index 8fe282b..d999608 100644
--- a/doc/process_management.rst
+++ b/doc/process_management.rst
@@ -202,7 +202,17 @@ User identity control
#include <libHX/proc.h>
- int HXproc_switch_user(const char *user, const char *group);
+ enum HXproc_su_status {
+ HXPROC_INITGROUPS_FAILED = -5,
+ HXPROC_SETGID_FAILED = -4,
+ HXPROC_SETUID_FAILED = -3,
+ HXPROC_GROUP_NOT_FOUND = -2,
+ HXPROC_USER_NOT_FOUND = -1,
+ HXPROC_SU_NOOP = 0,
+ HXPROC_SU_SUCCESS = 1,
+ };
+
+ enum HXproc_su_status HXproc_switch_user(const char *user, const char *group);
``HXproc_switch_user`` is a wrapper for changing process identity to an
unprivileged user. This utilizes ``setuid``, and possibly ``setgid`` plus
@@ -217,6 +227,9 @@ process group(s) will change to the the user's group(s) — both primary and
secondary — provided a user was specified (see above). When ``gruop`` is the
empty string, no change of process group identity occurs.
+The return value is an enum indicating failure with values <0, and success with
+>=0.
+
Process information
===================
diff --git a/doc/socket_functions.rst b/doc/socket_functions.rst
index 5d55cf8..fef6e7c 100644
--- a/doc/socket_functions.rst
+++ b/doc/socket_functions.rst
@@ -31,27 +31,31 @@ Socket functions
system defaults. (It may choose whatever protocol is offered by the
system.) ``oflags`` is a bitset which may contain ``O_NONBLOCK``, else
must be 0. Upon success, a socket file descriptor is returned. Upon
- failure, a negative errno code is returned.
+ failure, a negative errno code is returned. The socket will have
+ ``SOCK_CLOEXEC`` set by default if the platform supports it.
``HX_inet_listen``
The function first resolves ``host`` using ``getaddrinfo()` with
``AI_PASSIVE``, then using ``HX_socket_from_env`` looks in the
environment for a matching socket to pick up, and otherwise uses the
first result from getaddrinfo to create a new socket. Upon error, a
- negative errno value is returned.
+ negative errno value is returned. The socket will have ``SOCK_CLOEXEC``
+ set by default if the platform supports it.
``HX_local_listen``
The function creates a local system-specific socket. Using
``HX_socket_from_env``, it will attempt to pick up a matching socket
from the environment, and otherwise create a new socket. Upon error, a
- negative errno value is returned.
+ negative errno value is returned. The socket will have ``SOCK_CLOEXEC``
+ set by default if the platform supports it.
``HX_socket_from_env``
The function looks up the current process's file descriptors for a
socket that is listening and which matches the given addrinfo and
(optionally) intf if the latter is not NULL``. Upon success, the fd
number is returned, or -1 if no file descriptor matched. No errors are
- signalled.
+ signalled. Before this function returns a file descriptor, it sets
+ ``SOCK_CLOEXEC``.
``HX_sockaddr_is_local``
Attempts to determine if the given socket address refers to a local
diff --git a/doc/string_ops.rst b/doc/string_ops.rst
index 9bb711f..d818d2d 100644
--- a/doc/string_ops.rst
+++ b/doc/string_ops.rst
@@ -456,17 +456,20 @@ Conversion from/to human-readable durations with units
#include <libHX/string.h>
unsigned long long HX_strtoull_sec(const char *s, char **end);
+ unsigned long long HX_strtoull_nsec(const char *s, char **end);
char *HX_unit_seconds(char *out, size_t outsize,
unsigned long long seconds,
unsigned int flags);
-``HX_strtoull_sec`` converts a time duration with units, such as ``"15min30s"``
-into an all-seconds value. The recognized unit strings are: ``years``,
-``year``, ``y``, ``months``, ``month``, ``days``, ``day``, ``d``, ``hours``,
-``hour``, ``h``, ``minutes``, ``minute``, ``min``, ``seconds``, ``second``,
-``s`` and the empty string (for seconds). When parsing stops at any point,
-``*end`` is set to the location, similar to how the ``strtoull`` C function
-would.
+``HX_strtoull_sec`` and ``HX_strtoull_nsec`` convert a time duration with
+units, such as ``"15min30s"`` into an all-seconds and all-nanoseconds value,
+respectively. The recognized unit strings are: ``years``, ``year``, ``y``,
+``months``, ``month``, ``days``, ``day``, ``d``, ``hours``, ``hour``, ``h``,
+``minutes``, ``minute``, ``min``, ``seconds``, ``second``, ``s``, the empty
+string (to mean seconds), ``msec``, ``ms``, ``µsec``, ``µs``, ``nsec`` and
+``ns``. Negative durations are not supported. Support for fractions is
+implementation-defined. When parsing stops at any point, ``*end`` is set to the
+location, similar to how the ``strtoull`` C function would.
One year is defined to be 365.25 days of 86400 seconds; one month is defined to
be 1/12 such a year. This is consistent with the units employed by systemd.
diff --git a/include/Makefile.in b/include/Makefile.in
index 525f047..40582cf 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -202,7 +202,6 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
-FILECMD = @FILECMD@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
diff --git a/include/libHX/misc.h b/include/libHX/misc.h
index 23607d2..1d49c7f 100644
--- a/include/libHX/misc.h
+++ b/include/libHX/misc.h
@@ -59,6 +59,8 @@ extern const char *HX_dlerror(void);
*/
extern int HX_ffs(unsigned long);
extern int HX_fls(unsigned long);
+extern float HX_flprf(float, float);
+extern double HX_flpr(double, double);
#ifndef HX_HEXDUMP_DECLARATION
#define HX_HEXDUMP_DECLARATION 1
extern void HX_hexdump(FILE *, const void *, unsigned int);
diff --git a/include/libHX/string.h b/include/libHX/string.h
index 9e78cd0..4da3619 100644
--- a/include/libHX/string.h
+++ b/include/libHX/string.h
@@ -103,6 +103,7 @@ extern unsigned long long HX_strtoull_unit(const char *, char **, unsigned int e
extern char *HX_unit_size(char *out, size_t bufsize, unsigned long long size, unsigned int divisor, unsigned int cutoff);
extern char *HX_unit_size_cu(char *out, size_t bufsize, unsigned long long size, unsigned int divisor);
extern unsigned long long HX_strtoull_sec(const char *s, char **);
+extern unsigned long long HX_strtoull_nsec(const char *s, char **);
extern char *HX_unit_seconds(char *out, size_t bufsize, unsigned long long seconds, unsigned int flags);
static __inline__ void *HX_memdup(const void *buf, size_t len)
diff --git a/libHX.pc.in b/libHX.pc.in
index 989adc3..1aca480 100644
--- a/libHX.pc.in
+++ b/libHX.pc.in
@@ -9,4 +9,4 @@ Description: Useful collection of routines for C and C++ programming
Version: @PACKAGE_VERSION@
Cflags: -I${includedir}
Libs: -L${libdir} -lHX
-Libs.private: @libdl_LIBS@ @libpthread_LIBS@ @librt_LIBS@
+Libs.private: @libdl_LIBS@ @libpthread_LIBS@ @librt_LIBS@ @libsocket_LIBS@
diff --git a/m4/.gitignore b/m4/.gitignore
deleted file mode 100644
index 64d9bbc..0000000
--- a/m4/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/libtool.m4
-/lt*.m4
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index 717e769..4e87d34 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -1,7 +1,6 @@
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
#
-# Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software
-# Foundation, Inc.
+# 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
@@ -32,7 +31,7 @@ m4_define([_LT_COPYING], [dnl
# along with this program. If not, see <http://www.gnu.org/licenses/>.
])
-# serial 59 LT_INIT
+# serial 58 LT_INIT
# LT_PREREQ(VERSION)
@@ -182,7 +181,6 @@ 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_DECL_FILECMD])dnl
m4_require([_LT_CHECK_MAGIC_METHOD])dnl
m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
m4_require([_LT_CMD_OLD_ARCHIVE])dnl
@@ -221,8 +219,8 @@ esac
ofile=libtool
can_build_shared=yes
-# All known linkers require a '.a' archive for static linking (except MSVC and
-# ICC, which need '.lib').
+# 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
@@ -779,7 +777,7 @@ _LT_EOF
# 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" \
+ sed '$q' "$ltmain" >> "$cfgfile" \
|| (rm -f "$cfgfile"; exit 1)
mv -f "$cfgfile" "$ofile" ||
@@ -1043,8 +1041,8 @@ 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 $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
- $AR $AR_FLAGS libconftest.a conftest.o 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
@@ -1068,12 +1066,17 @@ _LT_EOF
_lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
darwin1.*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- darwin*)
- case $MACOSX_DEPLOYMENT_TARGET,$host in
- 10.[[012]],*|,*powerpc*-darwin[[5-8]]*)
- _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- *)
- _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ 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
@@ -1122,12 +1125,12 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
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"
+ _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"
+ _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
@@ -1241,8 +1244,7 @@ _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
# _LT_WITH_SYSROOT
# ----------------
AC_DEFUN([_LT_WITH_SYSROOT],
-[m4_require([_LT_DECL_SED])dnl
-AC_MSG_CHECKING([for 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
@@ -1259,7 +1261,7 @@ case $with_sysroot in #(
fi
;; #(
/*)
- lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
+ lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
;; #(
no|'')
;; #(
@@ -1289,7 +1291,7 @@ ia64-*-hpux*)
# options accordingly.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
- case `$FILECMD conftest.$ac_objext` in
+ case `/usr/bin/file conftest.$ac_objext` in
*ELF-32*)
HPUX_IA64_MODE=32
;;
@@ -1306,7 +1308,7 @@ ia64-*-hpux*)
echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
if test yes = "$lt_cv_prog_gnu_ld"; then
- case `$FILECMD conftest.$ac_objext` in
+ case `/usr/bin/file conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -melf32bsmip"
;;
@@ -1318,7 +1320,7 @@ ia64-*-hpux*)
;;
esac
else
- case `$FILECMD conftest.$ac_objext` in
+ case `/usr/bin/file conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -32"
;;
@@ -1340,7 +1342,7 @@ mips64*-*linux*)
echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
emul=elf
- case `$FILECMD conftest.$ac_objext` in
+ case `/usr/bin/file conftest.$ac_objext` in
*32-bit*)
emul="${emul}32"
;;
@@ -1348,7 +1350,7 @@ mips64*-*linux*)
emul="${emul}64"
;;
esac
- case `$FILECMD conftest.$ac_objext` in
+ case `/usr/bin/file conftest.$ac_objext` in
*MSB*)
emul="${emul}btsmip"
;;
@@ -1356,7 +1358,7 @@ mips64*-*linux*)
emul="${emul}ltsmip"
;;
esac
- case `$FILECMD conftest.$ac_objext` in
+ case `/usr/bin/file conftest.$ac_objext` in
*N32*)
emul="${emul}n32"
;;
@@ -1376,14 +1378,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# not appear in the list.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
- case `$FILECMD conftest.o` in
+ 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 `$FILECMD conftest.o` in
+ case `/usr/bin/file conftest.o` in
*x86-64*)
LD="${LD-ld} -m elf32_x86_64"
;;
@@ -1451,7 +1453,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# options accordingly.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
- case `$FILECMD conftest.o` in
+ case `/usr/bin/file conftest.o` in
*64-bit*)
case $lt_cv_prog_gnu_ld in
yes*)
@@ -1490,22 +1492,9 @@ need_locks=$enable_libtool_lock
m4_defun([_LT_PROG_AR],
[AC_CHECK_TOOLS(AR, [ar], false)
: ${AR=ar}
+: ${AR_FLAGS=cru}
_LT_DECL([], [AR], [1], [The archiver])
-
-# Use ARFLAGS variable as AR's operation code to sync the variable naming with
-# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
-# higher priority because thats what people were doing historically (setting
-# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS
-# variable obsoleted/removed.
-
-test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
-lt_ar_flags=$AR_FLAGS
-_LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)])
-
-# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override
-# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
-_LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}],
- [Flags to create an archive])
+_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
@@ -1724,7 +1713,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
lt_cv_sys_max_cmd_len=8192;
;;
- bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
+ 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`
@@ -1767,7 +1756,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
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/.*[[ ]]//'`
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
else
lt_cv_sys_max_cmd_len=32768
fi
@@ -2217,35 +2206,26 @@ m4_defun([_LT_CMD_STRIPLIB],
striplib=
old_striplib=
AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -z "$STRIP"; then
- AC_MSG_RESULT([no])
+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
- if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
- old_striplib="$STRIP --strip-debug"
- striplib="$STRIP --strip-unneeded"
- AC_MSG_RESULT([yes])
- else
- case $host_os in
- darwin*)
- # FIXME - insert some real tests, host_os isn't really good enough
+# 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])
- ;;
- freebsd*)
- if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
- old_striplib="$STRIP --strip-debug"
- striplib="$STRIP --strip-unneeded"
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- fi
- ;;
- *)
+ else
AC_MSG_RESULT([no])
- ;;
- esac
- fi
+ fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
fi
_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
_LT_DECL([], [striplib], [1])
@@ -2568,7 +2548,7 @@ cygwin* | mingw* | pw32* | cegcc*)
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'
+ 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"])
;;
@@ -2578,14 +2558,14 @@ m4_if([$1], [],[
;;
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'
+ 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* | *,icl*)
- # Native MSVC or ICC
+ *,cl*)
+ # Native MSVC
libname_spec='$name'
soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
library_names_spec='$libname.dll.lib'
@@ -2604,7 +2584,7 @@ m4_if([$1], [],[
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|^ ||'`
+ 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
@@ -2641,7 +2621,7 @@ m4_if([$1], [],[
;;
*)
- # Assume MSVC and ICC wrapper
+ # Assume MSVC wrapper
library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib'
dynamic_linker='Win32 ld.exe'
;;
@@ -2674,7 +2654,7 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
-freebsd* | dragonfly* | midnightbsd*)
+freebsd* | dragonfly*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
if test -x /usr/bin/objformat; then
@@ -3473,7 +3453,7 @@ beos*)
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='$FILECMD -L'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
lt_cv_file_magic_test_file=/shlib/libc.so
;;
@@ -3507,14 +3487,14 @@ darwin* | rhapsody*)
lt_cv_deplibs_check_method=pass_all
;;
-freebsd* | dragonfly* | midnightbsd*)
+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=$FILECMD
+ lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
esac
@@ -3528,7 +3508,7 @@ haiku*)
;;
hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=$FILECMD
+ 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'
@@ -3575,7 +3555,7 @@ netbsd*)
newos6*)
lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=$FILECMD
+ lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
@@ -3702,13 +3682,13 @@ else
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
+ 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
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
*/dev/null*)
lt_cv_path_NM="$tmp_nm -p"
break 2
@@ -3734,7 +3714,7 @@ else
# 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
+ case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
*COFF*)
DUMPBIN="$DUMPBIN -symbols -headers"
;;
@@ -3974,7 +3954,7 @@ 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'"
+ 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'"
@@ -3992,20 +3972,20 @@ 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_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_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_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'"\
@@ -4029,7 +4009,7 @@ for ac_symprfx in "" "_"; do
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++ or ICC,
+ # Also find C++ and __fastcall symbols from MSVC++,
# which start with @ or ?.
lt_cv_sys_global_symbol_pipe="$AWK ['"\
" {last_section=section; section=\$ 3};"\
@@ -4047,9 +4027,9 @@ for ac_symprfx in "" "_"; do
" 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'"
+ 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'"
+ 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
@@ -4336,7 +4316,7 @@ m4_if([$1], [CXX], [
;;
esac
;;
- freebsd* | dragonfly* | midnightbsd*)
+ freebsd* | dragonfly*)
# FreeBSD uses GNU C++
;;
hpux9* | hpux10* | hpux11*)
@@ -4419,7 +4399,7 @@ m4_if([$1], [CXX], [
_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
;;
*)
- case `$CC -V 2>&1 | $SED 5q` in
+ case `$CC -V 2>&1 | sed 5q` in
*Sun\ C*)
# Sun C++ 5.9
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
@@ -4755,7 +4735,7 @@ m4_if([$1], [CXX], [
_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
;;
*)
- case `$CC -V 2>&1 | $SED 5q` in
+ 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'
@@ -4938,7 +4918,7 @@ m4_if([$1], [CXX], [
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 == "L") || (\$ 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'
+ _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*)
@@ -4946,7 +4926,7 @@ m4_if([$1], [CXX], [
;;
cygwin* | mingw* | cegcc*)
case $cc_basename in
- cl* | icl*)
+ cl*)
_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
;;
*)
@@ -5003,15 +4983,15 @@ dnl Note also adjust exclude_expsyms for C++ above.
case $host_os in
cygwin* | mingw* | pw32* | cegcc*)
- # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+ # 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++ or Intel C++ Compiler.
+ # 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++ or ICC)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
with_gnu_ld=yes
;;
openbsd* | bitrig*)
@@ -5063,7 +5043,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
_LT_TAGVAR(whole_archive_flag_spec, $1)=
fi
supports_anon_versioning=no
- case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in
+ 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 ...
@@ -5175,7 +5155,6 @@ _LT_EOF
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
- _LT_TAGVAR(file_list_spec, $1)='@'
;;
interix[[3-9]]*)
@@ -5190,7 +5169,7 @@ _LT_EOF
# 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'
+ _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)
@@ -5233,7 +5212,7 @@ _LT_EOF
_LT_TAGVAR(compiler_needs_object, $1)=yes
;;
esac
- case `$CC -V 2>&1 | $SED 5q` in
+ 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
@@ -5245,7 +5224,7 @@ _LT_EOF
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~
+ 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
@@ -5261,7 +5240,7 @@ _LT_EOF
_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~
+ 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
@@ -5393,7 +5372,7 @@ _LT_EOF
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 == "L") || (\$ 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'
+ _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
@@ -5576,12 +5555,12 @@ _LT_EOF
cygwin* | mingw* | pw32* | cegcc*)
# When not using gcc, we currently assume that we are using
- # Microsoft Visual C++ or Intel C++ Compiler.
+ # Microsoft Visual C++.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
case $cc_basename in
- cl* | icl*)
- # Native MSVC or ICC
+ cl*)
+ # Native MSVC
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
_LT_TAGVAR(always_export_symbols, $1)=yes
@@ -5622,7 +5601,7 @@ _LT_EOF
fi'
;;
*)
- # Assume MSVC and ICC wrapper
+ # 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.
@@ -5670,7 +5649,7 @@ _LT_EOF
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly* | midnightbsd*)
+ 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
@@ -5881,7 +5860,6 @@ _LT_EOF
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
- _LT_TAGVAR(file_list_spec, $1)='@'
;;
osf3*)
@@ -6652,8 +6630,8 @@ if test yes != "$_lt_caught_CXX_error"; then
cygwin* | mingw* | pw32* | cegcc*)
case $GXX,$cc_basename in
- ,cl* | no,cl* | ,icl* | no,icl*)
- # Native MSVC or ICC
+ ,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)=' '
@@ -6751,7 +6729,6 @@ if test yes != "$_lt_caught_CXX_error"; then
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
- _LT_TAGVAR(file_list_spec, $1)='@'
;;
dgux*)
@@ -6782,7 +6759,7 @@ if test yes != "$_lt_caught_CXX_error"; then
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
;;
- freebsd* | dragonfly* | midnightbsd*)
+ freebsd* | dragonfly*)
# FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
# conventions
_LT_TAGVAR(ld_shlibs, $1)=yes
@@ -6919,7 +6896,7 @@ if test yes != "$_lt_caught_CXX_error"; then
# 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'
+ _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
@@ -7059,13 +7036,13 @@ if test yes != "$_lt_caught_CXX_error"; then
_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~
+ 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
+ case `$CC -V 2>&1 | sed 5q` in
*Sun\ C*)
# Sun C++ 5.9
_LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
@@ -8211,14 +8188,6 @@ _LT_DECL([], [DLLTOOL], [1], [DLL creation program])
AC_SUBST([DLLTOOL])
])
-# _LT_DECL_FILECMD
-# ----------------
-# Check for a file(cmd) program that can be used to detect file type and magic
-m4_defun([_LT_DECL_FILECMD],
-[AC_CHECK_TOOL([FILECMD], [file], [:])
-_LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types])
-])# _LD_DECL_FILECMD
-
# _LT_DECL_SED
# ------------
# Check for a fully-functional sed program, that truncates
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
index b0b5e9c..94b0829 100644
--- a/m4/ltoptions.m4
+++ b/m4/ltoptions.m4
@@ -1,7 +1,7 @@
# Helper functions for option handling. -*- Autoconf -*-
#
-# Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free
-# Software Foundation, Inc.
+# 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
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
index 902508b..48bc934 100644
--- a/m4/ltsugar.m4
+++ b/m4/ltsugar.m4
@@ -1,6 +1,6 @@
# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
#
-# Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software
+# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software
# Foundation, Inc.
# Written by Gary V. Vaughan, 2004
#
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
index b155d0a..fa04b52 100644
--- a/m4/ltversion.m4
+++ b/m4/ltversion.m4
@@ -1,7 +1,6 @@
# ltversion.m4 -- version numbers -*- Autoconf -*-
#
-# Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation,
-# Inc.
+# 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
@@ -10,15 +9,15 @@
# @configure_input@
-# serial 4245 ltversion.m4
+# serial 4179 ltversion.m4
# This file is part of GNU Libtool
-m4_define([LT_PACKAGE_VERSION], [2.4.7])
-m4_define([LT_PACKAGE_REVISION], [2.4.7])
+m4_define([LT_PACKAGE_VERSION], [2.4.6])
+m4_define([LT_PACKAGE_REVISION], [2.4.6])
AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.4.7'
-macro_revision='2.4.7'
+[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)
])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
index 0f7a875..c6b26f8 100644
--- a/m4/lt~obsolete.m4
+++ b/m4/lt~obsolete.m4
@@ -1,7 +1,7 @@
# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
#
-# Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free
-# Software Foundation, Inc.
+# 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
diff --git a/qconf b/qconf
deleted file mode 100755
index 654e0bb..0000000
--- a/qconf
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-topdir="${0%/*}"
-if [ "$topdir" = "$0" ]; then
- topdir=.
-fi
-abstopdir=$(readlink -f "$topdir")
-if [ ! -e "${topdir}/configure" ]; then
- cd "$topdir"
- autoreconf -fi
- cd -
-fi
-exec "$topdir/configure" CFLAGS="-O0 -ggdb3" CXXFLAGS="-O0 -ggdb3" "$@"
diff --git a/src/.gitignore b/src/.gitignore
deleted file mode 100644
index 89edb97..0000000
--- a/src/.gitignore
+++ /dev/null
@@ -1,31 +0,0 @@
-/hxdirstamp
-/t?-cast
-/t?-compile
-/t?-deque
-/t?-dir
-/t?-format
-/t?-intdiff
-/t?-io
-/t?-link
-/t?-list
-/t?-list2
-/t?-map
-/t?-memmem
-/t?-misc
-/t?-netio
-/t?-option
-/t?-other
-/t?-proc
-/t?-rand
-/t?-realpath
-/t?-shconfig
-/t?-socket
-/t?-strchr2
-/t?-string
-/t?-strquote
-/t?-switchuser
-/t?-time
-
-# automake tests
-*.log
-*.trs
diff --git a/src/Makefile.am b/src/Makefile.am
index f7ff4f6..ac68f74 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -12,8 +12,8 @@ endif
libHX_la_SOURCES = deque.c dl.c format.c io.c map.c \
mc.c misc.c opt.c proc.c \
rand.c socket.c string.c time.c
-libHX_la_LIBADD = ${libdl_LIBS} -lm ${libpthread_LIBS} ${librt_LIBS}
-libHX_la_LDFLAGS = -no-undefined -version-info 37:0:5
+libHX_la_LIBADD = ${libdl_LIBS} -lm ${libpthread_LIBS} ${librt_LIBS} ${libsocket_LIBS}
+libHX_la_LDFLAGS = -no-undefined -version-info 38:0:6
if WITH_GNU_LD
libHX_la_LDFLAGS += -Wl,--version-script=${srcdir}/libHX.map
endif
diff --git a/src/Makefile.in b/src/Makefile.in
index 43f7444..d349749 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -165,7 +165,8 @@ am__installdirs = "$(DESTDIR)$(libdir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
am__DEPENDENCIES_1 =
libHX_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
am__libHX_la_SOURCES_DIST = deque.c dl.c format.c io.c map.c mc.c \
misc.c opt.c proc.c rand.c socket.c string.c time.c ux-file.c \
ux-mmap.c
@@ -671,7 +672,6 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
-FILECMD = @FILECMD@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -779,8 +779,8 @@ lib_LTLIBRARIES = libHX.la $(am__append_1)
libHX_la_SOURCES = deque.c dl.c format.c io.c map.c mc.c misc.c opt.c \
proc.c rand.c socket.c string.c time.c $(am__append_3)
libHX_la_LIBADD = ${libdl_LIBS} -lm ${libpthread_LIBS} ${librt_LIBS} \
- $(am__append_4)
-libHX_la_LDFLAGS = -no-undefined -version-info 37:0:5 $(am__append_2)
+ ${libsocket_LIBS} $(am__append_4)
+libHX_la_LDFLAGS = -no-undefined -version-info 38:0:6 $(am__append_2)
EXTRA_libHX_la_DEPENDENCIES = libHX.map
libHX_rtcheck_la_SOURCES = rtcheck.c
libHX_rtcheck_la_LIBADD = ${libdl_LIBS}
diff --git a/src/io.c b/src/io.c
index 76c9444..ee48dee 100644
--- a/src/io.c
+++ b/src/io.c
@@ -655,7 +655,7 @@ static ssize_t HX_sendfile_rw(int dst, int src, size_t count)
{
static const size_t bufsize = 0x10000;
size_t xferd = 0;
- ssize_t ret;
+ ssize_t ret = 0;
void *buf = malloc(bufsize);
if (buf == nullptr)
return -ENOMEM;
@@ -665,16 +665,13 @@ static ssize_t HX_sendfile_rw(int dst, int src, size_t count)
size_t readsize = bufsize;
if (count < readsize)
readsize = count;
+ /* Return value of fullread/write is same as read/write(2). */
ret = HXio_fullread(src, buf, readsize);
- if (ret < 0) {
- errno = -ret;
+ if (ret < 0)
break;
- }
ret = HXio_fullwrite(dst, buf, ret);
- if (ret < 0) {
- errno = -ret;
+ if (ret < 0)
break;
- }
xferd += ret;
count -= ret;
}
diff --git a/src/libHX.map b/src/libHX.map
index 33415fa..37bfe0f 100644
--- a/src/libHX.map
+++ b/src/libHX.map
@@ -167,3 +167,14 @@ global:
HX_inet_listen;
HX_local_listen;
} LIBHX_4.9;
+
+LIBHX_4.15 {
+global:
+ HX_flpr;
+ HX_flprf;
+} LIBHX_4.11;
+
+LIBHX_4.16 {
+global:
+ HX_strtoull_nsec;
+} LIBHX_4.15;
diff --git a/src/misc.c b/src/misc.c
index 7778b08..c138f23 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -7,6 +7,7 @@
* General Public License as published by the Free Software Foundation;
* either version 2.1 or (at your option) any later version.
*/
+#include <math.h> /* fmod */
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
@@ -88,3 +89,19 @@ EXPORT_SYMBOL void HX_zvecfree(char **args)
free(*travp);
free(args);
}
+
+EXPORT_SYMBOL float HX_flprf(float x, float y)
+{
+ float r = fmodf(x, y);
+ if (r < 0)
+ r += y;
+ return r;
+}
+
+EXPORT_SYMBOL double HX_flpr(double x, double y)
+{
+ double r = fmod(x, y);
+ if (r < 0)
+ r += y;
+ return r;
+}
diff --git a/src/socket.c b/src/socket.c
index 0b6f674..e2ad9ed 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -41,12 +41,17 @@
#else
# define STUPIDWIN(x) (x)
#endif
-#if defined(__sunos__) && !defined(SO_PROTOCOL)
+#if defined(__sun) && !defined(SO_PROTOCOL)
# define SO_PROTOCOL SO_PROTOTYPE
#endif
#ifndef AI_V4MAPPED
# define AI_V4MAPPED 0
#endif
+#ifdef SOCK_CLOEXEC
+# define PLATFORM_SKFLAGS SOCK_CLOEXEC
+#else
+# define PLATFORM_SKFLAGS 0
+#endif
/**
* Return the pointer to the singular colon character, any other input
@@ -152,7 +157,8 @@ int HX_inet_connect(const char *host, uint16_t port, unsigned int oflags)
if (ret != 0)
;
for (const struct addrinfo *r = aires; r != nullptr; r = r->ai_next) {
- int fd = socket(r->ai_family, r->ai_socktype, r->ai_protocol);
+ int fd = socket(r->ai_family, r->ai_socktype | PLATFORM_SKFLAGS,
+ r->ai_protocol);
if (fd < 0) {
if (saved_errno == 0)
saved_errno = errno;
@@ -195,7 +201,8 @@ int HX_inet_connect(const char *host, uint16_t port, unsigned int oflags)
static int HX_gai_listen(const struct addrinfo *r)
{
- int fd = socket(r->ai_family, r->ai_socktype, r->ai_protocol);
+ int fd = socket(r->ai_family, r->ai_socktype | PLATFORM_SKFLAGS,
+ r->ai_protocol);
if (fd < 0)
return -2;
static const int y = 1;
@@ -282,7 +289,7 @@ int HX_local_listen(const char *path)
if (!S_ISSOCK(sb.st_mode))
return -ENOTSOCK;
- int testfd = socket(AF_LOCAL, SOCK_STREAM, 0);
+ int testfd = socket(AF_LOCAL, SOCK_STREAM | PLATFORM_SKFLAGS, 0);
if (testfd < 0)
return -errno;
ret = connect(testfd, r.ai_addr, r.ai_addrlen);
@@ -388,8 +395,12 @@ EXPORT_SYMBOL int HX_socket_from_env(const struct addrinfo *ai, const char *intf
top_fd = x;
}
for (int fd = 3; fd < top_fd; ++fd)
- if (try_sk_from_env(fd, ai, intf) == fd)
+ if (try_sk_from_env(fd, ai, intf) == fd) {
+#ifdef SOCK_CLOEXEC
+ fcntl(fd, F_SETFD, fcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
+#endif
return fd;
+ }
errno = ENOENT;
return -1;
}
@@ -415,7 +426,7 @@ static int linux_sockaddr_local3(int sk, const void *buf, size_t bufsize)
static int linux_sockaddr_local2(const struct sockaddr *sa, socklen_t sl)
{
- int sk = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
+ int sk = socket(AF_NETLINK, SOCK_DGRAM | PLATFORM_SKFLAGS, NETLINK_ROUTE);
if (sk < 0)
return -errno;
struct {
@@ -474,7 +485,7 @@ static int openbsd_sockaddr_local3(int rsk, const void *buf, size_t bufsize)
static int openbsd_sockaddr_local2(const struct sockaddr *sa, socklen_t sl)
{
- int sk = socket(AF_ROUTE, SOCK_RAW, AF_UNSPEC);
+ int sk = socket(AF_ROUTE, SOCK_RAW | PLATFORM_SKFLAGS, AF_UNSPEC);
if (sk < 0)
return -errno;
struct {
diff --git a/src/string.c b/src/string.c
index ae19271..4abd694 100644
--- a/src/string.c
+++ b/src/string.c
@@ -9,7 +9,7 @@
*/
#include <errno.h>
#include <limits.h>
-#include <math.h>
+#include <math.h> /* nextafter */
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
@@ -476,7 +476,7 @@ EXPORT_SYMBOL char *HX_strrev(char *s)
EXPORT_SYMBOL size_t HX_strrtrim(char *expr)
{
- int i = strlen(expr), s = 0;
+ size_t i = strlen(expr), s = 0;
while (i-- && HX_isspace(expr[i]))
++s;
expr[++i] = '\0';
@@ -1037,55 +1037,63 @@ EXPORT_SYMBOL unsigned long long HX_strtoull_unit(const char *s,
#define SECONDS_PER_YEAR 31557600
#define SECONDS_PER_MONTH 2629800
+#define NSEC_PER_SECOND 1000000000ULL
static const struct {
const char name[8];
unsigned int len;
- uint32_t mult;
+ uint32_t s_mult;
+ uint64_t ns_mult;
} time_multiplier[] = {
- {"seconds", 7, 1},
- {"second", 6, 1},
- {"sec", 3, 1},
- {"s", 1, 1},
- {"minutes", 7, 60},
- {"minute", 6, 60},
- {"min", 3, 60},
- {"hours", 5, 3600},
- {"hour", 4, 3600},
- {"h", 1, 3600},
- {"days", 4, 86400},
- {"day", 3, 86400},
- {"d", 1, 86400},
- {"weeks", 5, 604800},
- {"week", 4, 604800},
- {"months", 6, SECONDS_PER_MONTH},
- {"month", 5, SECONDS_PER_MONTH},
- {"years", 5, SECONDS_PER_YEAR},
- {"year", 4, SECONDS_PER_YEAR},
- {"y", 1, SECONDS_PER_YEAR},
+ {"seconds", 7, 1, 1 * NSEC_PER_SECOND},
+ {"second", 6, 1, 1 * NSEC_PER_SECOND},
+ {"sec", 3, 1, 1 * NSEC_PER_SECOND},
+ {"s", 1, 1, 1 * NSEC_PER_SECOND},
+ {"minutes", 7, 60, 60 * NSEC_PER_SECOND},
+ {"minute", 6, 60, 60 * NSEC_PER_SECOND},
+ {"min", 3, 60, 60 * NSEC_PER_SECOND},
+ {"hours", 5, 3600, 3600 * NSEC_PER_SECOND},
+ {"hour", 4, 3600, 3600 * NSEC_PER_SECOND},
+ {"h", 1, 3600, 3600 * NSEC_PER_SECOND},
+ {"days", 4, 86400, 86400 * NSEC_PER_SECOND},
+ {"day", 3, 86400, 86400 * NSEC_PER_SECOND},
+ {"d", 1, 86400, 86400 * NSEC_PER_SECOND},
+ {"weeks", 5, 604800, 604800 * NSEC_PER_SECOND},
+ {"week", 4, 604800, 604800 * NSEC_PER_SECOND},
+ {"months", 6, SECONDS_PER_MONTH, SECONDS_PER_MONTH * NSEC_PER_SECOND},
+ {"month", 5, SECONDS_PER_MONTH, SECONDS_PER_MONTH * NSEC_PER_SECOND},
+ {"years", 5, SECONDS_PER_YEAR, SECONDS_PER_YEAR * NSEC_PER_SECOND},
+ {"year", 4, SECONDS_PER_YEAR, SECONDS_PER_YEAR * NSEC_PER_SECOND},
+ {"y", 1, SECONDS_PER_YEAR, SECONDS_PER_YEAR * NSEC_PER_SECOND},
+ {"msec", 4, 0, 1000000},
+ {"ms", 2, 0, 1000000},
+ {"µsec", 5, 0, 1000},
+ {"µs", 3, 0, 1000},
+ {"nsec", 4, 0, 1},
+ {"ns", 2, 0, 1},
+ {"", 0, 1, NSEC_PER_SECOND},
};
-EXPORT_SYMBOL unsigned long long HX_strtoull_sec(const char *s, char **out_end)
+static unsigned long long HX_strtoull_time(const char *s, char **out_end, bool nsec)
{
- unsigned long long seconds = 0;
+ unsigned long long quant = 0;
while (*s != '\0') {
while (HX_isspace(*s))
++s;
- if (*s == '-') {
+ if (*s == '-')
break;
- }
char *end = nullptr;
unsigned long long num = strtoull(s, &end, 10);
+ double frac = 0;
+ bool have_frac = *end == '.';
+ if (have_frac)
+ frac = strtod(s, &end);
if (end == s)
break;
s = end;
while (HX_isspace(*s))
++s;
- if (!HX_isalpha(*s)) {
- seconds += num;
- continue;
- }
unsigned int i;
for (i = 0; i < ARRAY_SIZE(time_multiplier); ++i)
if (strncmp(s, time_multiplier[i].name,
@@ -1094,12 +1102,26 @@ EXPORT_SYMBOL unsigned long long HX_strtoull_sec(const char *s, char **out_end)
break;
if (i == ARRAY_SIZE(time_multiplier))
break;
- seconds += num * time_multiplier[i].mult;
+ unsigned long long mult = nsec ? time_multiplier[i].ns_mult : time_multiplier[i].s_mult;
+ if (have_frac)
+ quant += frac * mult;
+ else
+ quant += num * mult;
s += time_multiplier[i].len;
}
if (out_end != nullptr)
*out_end = const_cast(char *, s);
- return seconds;
+ return quant;
+}
+
+EXPORT_SYMBOL unsigned long long HX_strtoull_sec(const char *s, char **out_end)
+{
+ return HX_strtoull_time(s, out_end, false);
+}
+
+EXPORT_SYMBOL unsigned long long HX_strtoull_nsec(const char *s, char **out_end)
+{
+ return HX_strtoull_time(s, out_end, true);
}
EXPORT_SYMBOL char *HX_unit_seconds(char *out, size_t outsize,
diff --git a/src/tc-cast.c b/src/tc-cast.c
index 2c58805..36bf8b0 100644
--- a/src/tc-cast.c
+++ b/src/tc-cast.c
@@ -77,7 +77,7 @@ static void c_constA(void)
int main(void)
{
if (HX_init() <= 0)
- abort();
+ return EXIT_FAILURE;
c_signed();
c_reinterpret();
c_static();
@@ -86,5 +86,5 @@ int main(void)
c_const3();
c_constA();
HX_exit();
- return 0;
+ return EXIT_SUCCESS;
}
diff --git a/src/tc-compile.c b/src/tc-compile.c
index d2b0d09..d60ff21 100644
--- a/src/tc-compile.c
+++ b/src/tc-compile.c
@@ -17,7 +17,7 @@ int main(void)
unsigned char bmchar[HXbitmap_size(unsigned char, 256)] = {0};
if (HX_init() <= 0)
- abort();
+ return EXIT_FAILURE;
printf("sizeof bmllong:\t%" HX_SIZET_FMT "u, array_size: %" HX_SIZET_FMT "u\n",
sizeof(bmllong), ARRAY_SIZE(bmllong));
printf("sizeof bmlong:\t%" HX_SIZET_FMT "u, array_size: %" HX_SIZET_FMT "u\n",
diff --git a/src/tc-dir.c b/src/tc-dir.c
index 12cbacd..ec44977 100644
--- a/src/tc-dir.c
+++ b/src/tc-dir.c
@@ -25,7 +25,7 @@ static void lookatdir(const char *dname)
int main(int argc, const char **argv)
{
if (HX_init() <= 0)
- abort();
+ return EXIT_FAILURE;
if (argc == 1) {
/* On Windows VCRT, "/" yields nothing, "c:/" is needed */
lookatdir("/");
diff --git a/src/tc-io.c b/src/tc-io.c
index 639ebcc..77baf01 100644
--- a/src/tc-io.c
+++ b/src/tc-io.c
@@ -20,7 +20,10 @@ static void sf(void)
return;
}
ssize_t ret = HX_sendfile(dst, src, SIZE_MAX);
- printf("sendfile transferred %zd bytes\n", ret);
+ if (ret < 0)
+ printf("sendfile: %s\n", strerror(errno));
+ else
+ printf("sendfile transferred %zd bytes\n", ret);
close(dst);
close(src);
}
diff --git a/src/tc-list.c b/src/tc-list.c
index 2fd6380..e8a30b6 100644
--- a/src/tc-list.c
+++ b/src/tc-list.c
@@ -22,7 +22,7 @@ union list_encap {
static HXCLIST_HEAD(strings_ct);
-static void l_init(unsigned int max, bool unshift)
+static int l_init(unsigned int max, bool unshift)
{
static const char *const msg[] = {"Pushing", "Unshifting"};
struct text_object *obj;
@@ -34,7 +34,7 @@ static void l_init(unsigned int max, bool unshift)
#else
obj = malloc(sizeof(*obj));
if (obj == NULL)
- abort();
+ return EXIT_FAILURE;
#endif
HXlist_init(&obj->list);
obj->id[0] = HX_irand('a', 'z'+1);
@@ -48,6 +48,7 @@ static void l_init(unsigned int max, bool unshift)
else
HXclist_push(&strings_ct, &obj->list);
}
+ return EXIT_SUCCESS;
}
static void l_traverse(void)
@@ -137,16 +138,17 @@ static void l_shift(void)
#pragma GCC diagnostic pop
}
-int main(int argc, const char **argv)
+static int runner(int argc, const char **argv)
{
unsigned int max = 10;
if (HX_init() <= 0)
- abort();
+ return EXIT_FAILURE;
if (argc >= 2)
max = strtoul(argv[1], NULL, 0);
-
- l_init(max, HX_rand() & 1);
+ int ret = l_init(max, HX_rand() & 1);
+ if (ret != EXIT_SUCCESS)
+ return ret;
l_traverse();
l_dump(HX_rand() & 1);
l_empty();
@@ -154,3 +156,11 @@ int main(int argc, const char **argv)
HX_exit();
return EXIT_SUCCESS;
}
+
+int main(int argc, const char **argv)
+{
+ int ret = runner(argc, argv);
+ if (ret != EXIT_FAILURE)
+ fprintf(stderr, "FAILED\n");
+ return ret;
+}
diff --git a/src/tc-map.c b/src/tc-map.c
index 0037c83..e9e896f 100644
--- a/src/tc-map.c
+++ b/src/tc-map.c
@@ -205,7 +205,7 @@ static void tmap_trav_speed(struct HXmap *map)
tmap_ipop();
}
-static void tmap_flat(const struct HXmap *map)
+static int tmap_flat(const struct HXmap *map)
{
struct HXmap_node *nodes;
unsigned int i;
@@ -215,12 +215,13 @@ static void tmap_flat(const struct HXmap *map)
nodes = HXmap_keysvalues(map);
if (nodes == NULL) {
perror("HXmap_keysvalues");
- abort();
+ return EXIT_FAILURE;
}
for (i = 0; i < map->items; ++i)
tmap_printf("%u. %s -> %s\n", i, nodes[i].skey, nodes[i].sdata);
tmap_ipop();
free(nodes);
+ return EXIT_SUCCESS;
}
static void tmap_trav(struct HXmap *map)
@@ -251,7 +252,7 @@ static void tmap_trav(struct HXmap *map)
HXmap_travfree(iter);
}
-static void tmap_generic_tests(enum HXmap_type type,
+static int tmap_generic_tests(enum HXmap_type type,
unsigned long (*hash_fn)(const void *, size_t), const char *hash_name)
{
struct HXmap_ops ops = {.k_hash = hash_fn};
@@ -265,10 +266,13 @@ static void tmap_generic_tests(enum HXmap_type type,
tmap_flush(map, false);
tmap_add_rand(map, 2);
- tmap_flat(map);
+ int ret = tmap_flat(map);
+ if (ret != EXIT_SUCCESS)
+ return ret;
tmap_trav(map);
tmap_flush(map, true);
HXmap_free(map);
+ return EXIT_SUCCESS;
}
static int tmap_strtolcmp(const void *a, const void *b, size_t z)
@@ -722,15 +726,16 @@ static void tmap_zero(void)
fprintf(stderr, "eek!\n");
}
-int main(void)
+static int runner(void)
{
if (HX_init() <= 0)
- abort();
-
+ return EXIT_FAILURE;
tmap_zero();
tmap_printf("* HXhashmap\n");
- tmap_generic_tests(HXMAPT_HASH, HXhash_djb2, "DJB2");
+ int ret = tmap_generic_tests(HXMAPT_HASH, HXhash_djb2, "DJB2");
+ if (ret != EXIT_SUCCESS)
+ return ret;
tmap_generic_tests(HXMAPT_HASH, HXhash_jlookup3s, "JL3");
tmap_hmap_test_1();
@@ -742,3 +747,11 @@ int main(void)
HX_exit();
return EXIT_SUCCESS;
}
+
+int main(void)
+{
+ int ret = runner();
+ if (ret != EXIT_SUCCESS)
+ fprintf(stderr, "FAILED\n");
+ return ret;
+}
diff --git a/src/tc-memmem.c b/src/tc-memmem.c
index a4f272e..1a56f1b 100644
--- a/src/tc-memmem.c
+++ b/src/tc-memmem.c
@@ -14,14 +14,14 @@ static unsigned int size = 1048576 * 64;
static const char filler_text[] =
"Slhrdlu cringle tongle flonging blobbity bleep blingmangl";
-static void long_scan(void)
+static int long_scan(void)
{
struct timespec start, stop, delta;
char *filler2, *p;
filler2 = malloc(size);
if (filler2 == NULL)
- abort();
+ return EXIT_FAILURE;
memset(filler2, 'l', size);
filler2[size-2] = 'a';
@@ -32,19 +32,20 @@ static void long_scan(void)
HX_timespec_sub(&delta, &stop, &start);
printf("long_scan: " HX_TIMESPEC_FMT "\n", HX_TIMESPEC_EXP(&delta));
free(filler2);
+ return EXIT_SUCCESS;
}
-int main(void)
+static int runner(void)
{
unsigned int i;
char *haystack;
struct timespec start, stop, delta;
if (HX_init() <= 0)
- abort();
+ return EXIT_FAILURE;
haystack = malloc(size);
if (haystack == NULL)
- abort();
+ return EXIT_FAILURE;
memset(haystack, 'A', size);
haystack[size-1] = haystack[size-2] = 'Z';
printf("Init done\n");
@@ -55,8 +56,11 @@ int main(void)
printf("%p\n", HX_memmem(filler_text, strlen(filler_text), "ngl", 3));
printf("%p\n", HX_memmem(filler_text, strlen(filler_text), "ngl", 3));
- long_scan();
-
+ int ret = long_scan();
+ if (ret != EXIT_SUCCESS) {
+ free(haystack);
+ return ret;
+ }
for (i = 0; i < 10; ++i) {
printf("Search length %u...", i);
clock_gettime(CLOCK_THREAD_CPUTIME_ID, &start);
@@ -66,6 +70,15 @@ int main(void)
printf(HX_TIMESPEC_FMT "\n", HX_TIMESPEC_EXP(&delta));
}
+ free(haystack);
HX_exit();
return EXIT_SUCCESS;
}
+
+int main(void)
+{
+ int ret = runner();
+ if (ret != EXIT_FAILURE)
+ fprintf(stderr, "FAILED\n");
+ return ret;
+}
diff --git a/src/tc-misc.c b/src/tc-misc.c
index 5b043d4..d422f21 100644
--- a/src/tc-misc.c
+++ b/src/tc-misc.c
@@ -8,13 +8,13 @@
#include <libHX/init.h>
#include <libHX/misc.h>
-int main(int argc, const char **argv)
+static int runner(int argc, const char **argv)
{
unsigned int n;
struct stat sa, sb;
if (HX_init() <= 0)
- abort();
+ return EXIT_FAILURE;
printf("%d\n", HX_ffs(0));
for (n = 1; ; n <<= 1) {
printf("%08x = %d\n", n, HX_ffs(n));
@@ -30,12 +30,23 @@ int main(int argc, const char **argv)
if (argc >= 3) {
if (stat(argv[1], &sa) < 0 ||
- stat(argv[2], &sb) < 0)
+ stat(argv[2], &sb) < 0) {
perror("stat");
- else
+ return EXIT_FAILURE;
+ } else {
printf("Difference: %ld\n", HX_time_compare(&sa, &sb, 'm'));
+ return EXIT_FAILURE;
+ }
}
HX_exit();
return EXIT_SUCCESS;
}
+
+int main(int argc, const char **argv)
+{
+ int ret = runner(argc, argv);
+ if (ret != EXIT_FAILURE)
+ fprintf(stderr, "FAILED\n");
+ return ret;
+}
diff --git a/src/tc-netio.c b/src/tc-netio.c
index 5d3c22e..4510d0a 100644
--- a/src/tc-netio.c
+++ b/src/tc-netio.c
@@ -19,34 +19,47 @@
#endif
#include <libHX/init.h>
#include <libHX/io.h>
+#include "internal.h"
-int main(void)
+static int runner(void)
{
const char id[] = "SSH-2.0-OpenSSH_9.9";
- struct addrinfo *res;
+ struct addrinfo *res = nullptr;
int fd, ret;
if ((ret = HX_init()) <= 0) {
fprintf(stderr, "HX_init: %s\n", strerror(-ret));
- abort();
+ return EXIT_FAILURE;
}
fd = socket(AF_INET6, SOCK_STREAM, 0);
if (fd < 0) {
perror("socket");
- abort();
+ return EXIT_FAILURE;
}
if (getaddrinfo("::1", "22", NULL, &res) < 0) {
perror("getaddrinfo");
- abort();
+ close(fd);
+ return EXIT_FAILURE;
}
if (connect(fd, res->ai_addr, res->ai_addrlen) < 0) {
perror("connect");
- abort();
+ freeaddrinfo(res);
+ close(fd);
+ return EXIT_FAILURE;
}
if (HXio_fullwrite(fd, id, strlen(id)) < 0)
perror("write");
+ freeaddrinfo(res);
close(fd);
HX_exit();
return EXIT_SUCCESS;
}
+
+int main(void)
+{
+ int ret = runner();
+ if (ret != EXIT_SUCCESS)
+ fprintf(stderr, "FAILED\n");
+ return ret;
+}
diff --git a/src/tc-option.c b/src/tc-option.c
index db3d3f4..83271e0 100644
--- a/src/tc-option.c
+++ b/src/tc-option.c
@@ -99,7 +99,7 @@ static void t_empty_argv(void)
int main(int argc, const char **argv)
{
if (HX_init() <= 0)
- abort();
+ return EXIT_FAILURE;
printf("Return value of HX_getopt: %d\n",
HX_getopt(table, &argc, &argv, HXOPT_USAGEONERR));
t_empty_argv();
diff --git a/src/tc-proc.c b/src/tc-proc.c
index 19c8b18..c17b232 100644
--- a/src/tc-proc.c
+++ b/src/tc-proc.c
@@ -51,7 +51,7 @@ static void t_async1(void)
int main(void)
{
if (HX_init() <= 0)
- abort();
+ return EXIT_FAILURE;
printf("top fd: %d\n", HXproc_top_fd());
/* let it fail - test verbosity */
diff --git a/src/tc-rand.c b/src/tc-rand.c
index 149f18e..c581372 100644
--- a/src/tc-rand.c
+++ b/src/tc-rand.c
@@ -12,7 +12,7 @@ int main(void)
unsigned int i;
if (HX_init() <= 0)
- abort();
+ return EXIT_FAILURE;
for (i = 0; i < 15; ++i) {
printf("%d ", HX_irand(i, i));
printf("%.1f ", HX_drand(i, i));
diff --git a/src/tc-shconfig.c b/src/tc-shconfig.c
index 556f90f..3717c15 100644
--- a/src/tc-shconfig.c
+++ b/src/tc-shconfig.c
@@ -26,7 +26,7 @@ static void t_shconfig(const char *file)
fprintf(stderr, "Read error %s: %s\n", file, strerror(errno));
}
-static void t_shconfig2(const char *file)
+static int t_shconfig2(const char *file)
{
const struct HXmap_node *node;
struct HXmap_trav *trav;
@@ -35,15 +35,16 @@ static void t_shconfig2(const char *file)
map = HX_shconfig_map(file);
if (map == NULL) {
fprintf(stderr, "HX_shconfig_map: %s\n", strerror(errno));
- abort();
+ return EXIT_FAILURE;
}
trav = HXmap_travinit(map, HXMAP_NOFLAGS);
while ((node = HXmap_traverse(trav)) != NULL)
printf("\t\"%s\" -> \"%s\"\n", node->skey, node->sdata);
HXmap_travfree(trav);
+ return EXIT_SUCCESS;
}
-int main(int argc, const char **argv)
+static int runner(int argc, const char **argv)
{
int ret;
@@ -53,7 +54,17 @@ int main(int argc, const char **argv)
return EXIT_FAILURE;
}
t_shconfig((argc >= 2) ? argv[1] : "tc-shconf.c");
- t_shconfig2((argc >= 2) ? argv[1] : "tc-shconf.c");
+ ret = t_shconfig2((argc >= 2) ? argv[1] : "tc-shconf.c");
+ if (ret != EXIT_SUCCESS)
+ return ret;
HX_exit();
return EXIT_SUCCESS;
}
+
+int main(int argc, const char **argv)
+{
+ int ret = runner(argc, argv);
+ if (ret != EXIT_SUCCESS)
+ fprintf(stderr, "FAILED\n");
+ return ret;
+}
diff --git a/src/tc-string.c b/src/tc-string.c
index 9bf668b..1c7ed09 100644
--- a/src/tc-string.c
+++ b/src/tc-string.c
@@ -21,14 +21,14 @@
#include <libHX/string.h>
#include "internal.h"
-static void t_mc(void)
+static int t_mc(void)
{
hxmc_t *s, *old_s;
s = HXmc_meminit(NULL, 4096);
printf("%" HX_SIZET_FMT "u\n", HXmc_length(s));
if (HXmc_length(s) != 0)
- abort();
+ return EXIT_FAILURE;
old_s = s;
HXmc_trunc(&s, 8192);
if (old_s != s)
@@ -37,6 +37,7 @@ static void t_mc(void)
HXmc_setlen(&s, 16384);
printf("Length is now %" HX_SIZET_FMT "u\n", HXmc_length(s));
HXmc_free(s);
+ return EXIT_SUCCESS;
}
static void t_path(void)
@@ -60,13 +61,12 @@ static void t_path(void)
}
}
-static void t_strcpy(void)
+static int t_strcpy(void)
{
hxmc_t *vp = NULL;
HXmc_strcpy(&vp, NULL);
- if (vp != NULL)
- abort();
+ return vp == nullptr ? EXIT_SUCCESS : EXIT_FAILURE;
}
static void t_strdup(void)
@@ -291,7 +291,7 @@ static void t_strlcpy2(void)
assert(a[0] == 49 && a[0] == a[1] && a[1] == a[2]);
}
-static void t_units(void)
+static int t_units(void)
{
static const struct {
unsigned long long num;
@@ -320,18 +320,19 @@ static void t_units(void)
printf("\t%llu -> %s\n", vt[i].num, buf);
if (strcmp(buf, vt[i].exp_1024) != 0) {
printf("\texpected %s\n", vt[i].exp_1024);
- abort();
+ return EXIT_FAILURE;
}
HX_unit_size(buf, ARRAY_SIZE(buf), vt[i].num, 1000, 9120);
printf("\t%llu -> %s\n", vt[i].num, buf);
if (strcmp(buf, vt[i].exp_1000) != 0) {
printf("\texpected %s\n", vt[i].exp_1000);
- abort();
+ return EXIT_FAILURE;
}
}
+ return EXIT_SUCCESS;
}
-static void t_units_cu(void)
+static int t_units_cu(void)
{
static const struct {
unsigned long long num;
@@ -360,18 +361,19 @@ static void t_units_cu(void)
printf("\t%llu -> %s\n", vt[i].num, buf);
if (strcmp(buf, vt[i].exp_1024) != 0) {
printf("\texpected %s\n", vt[i].exp_1024);
- abort();
+ return EXIT_FAILURE;
}
HX_unit_size_cu(buf, ARRAY_SIZE(buf), vt[i].num, 1000);
printf("\t%llu -> %s\n", vt[i].num, buf);
if (strcmp(buf, vt[i].exp_1000) != 0) {
printf("\texpected %s\n", vt[i].exp_1000);
- abort();
+ return EXIT_FAILURE;
}
}
+ return EXIT_SUCCESS;
}
-static void t_units_strto(void)
+static int t_units_strto(void)
{
static const struct {
const char input[24];
@@ -416,8 +418,9 @@ static void t_units_strto(void)
unsigned long long q = HX_strtoull_unit(vt[i].input, &end, vt[i].exponent);
printf("%s -> %llu __ %s\n", vt[i].input, q, end);
if (q != vt[i].expect_out || strcmp(end, vt[i].expect_rem) != 0)
- printf("BUG\n");
+ return EXIT_FAILURE;
}
+ return EXIT_SUCCESS;
}
static void t_time_units(void)
@@ -454,25 +457,30 @@ static void t_time_units(void)
static void t_time_strto(void)
{
+ #define NS_PER_S 1000000000ULL
static const struct {
const char *input;
- unsigned long long expect_out;
- const char expect_rem[4];
+ unsigned long long expect_s, expect_ns;
+ const char expect_rem[8];
} vt[] = {
- {"1y1month1week1d1h1min1s ", 31557600+2629800+86400*8+3600+60+1, ""},
- {" -1d", 0, "-1d"},
- {"1 -", 1, "-"},
- {"1s", 1, ""},
- {"1min", 60, ""},
- {"0", 0, ""},
+ {"29µs", 0, 29000, ""},
+ {"1y", 31557600, NS_PER_S * 31557600, ""},
+ {"1y1month1week1d1h1min1s ", 31557600+2629800+86400*8+3600+60+1, NS_PER_S * (31557600+2629800+86400*8+3600+60+1), ""},
+ {" -1d", 0, 0, "-1d"},
+ {"1 -", 1, NS_PER_S, "-"},
+ {"12.5 hours .5 hours 240 minutes 25200 seconds", 86400, NS_PER_S * 86400, ""},
+ {"1s", 1, NS_PER_S, ""},
+ {"1min", 60, 60 * NS_PER_S, ""},
+ {"0", 0, 0, ""},
};
char *end;
printf("===== t_time_strto\n");
for (size_t i = 0; i < ARRAY_SIZE(vt); ++i) {
unsigned long long q = HX_strtoull_sec(vt[i].input, &end);
- printf("\"%s\" => %llus + \"%s\"\n", vt[i].input, q, end);
- if (q != vt[i].expect_out)
- printf("\tBUG: expected %llus\n", vt[i].expect_out);
+ unsigned long long qn = HX_strtoull_nsec(vt[i].input, &end);
+ printf("\"%s\" => %llus [%lluns] + \"%s\"\n", vt[i].input, q, qn, end);
+ if (q != vt[i].expect_s || qn != vt[i].expect_ns)
+ printf("\tBUG: expected %llus [%lluns]\n", vt[i].expect_s, vt[i].expect_ns);
if (strcmp(end, vt[i].expect_rem) != 0)
printf("\tBUG: expected remainder \"%s\"\n", vt[i].expect_rem);
}
@@ -507,14 +515,14 @@ static int t_strmid(void)
#undef T
}
-int main(int argc, const char **argv)
+static int runner(int argc, const char **argv)
{
hxmc_t *tx = NULL;
const char *file = (argc >= 2) ? argv[1] : "tx-string.cpp";
FILE *fp;
if (HX_init() <= 0)
- abort();
+ return EXIT_FAILURE;
int ret = t_strmid();
if (ret != EXIT_SUCCESS)
return EXIT_FAILURE;
@@ -528,9 +536,13 @@ int main(int argc, const char **argv)
fclose(fp);
}
- t_mc();
+ ret = t_mc();
+ if (ret != EXIT_SUCCESS)
+ return EXIT_FAILURE;
t_path();
- t_strcpy();
+ ret = t_strcpy();
+ if (ret != EXIT_SUCCESS)
+ return EXIT_FAILURE;
t_strncat();
t_strnlen();
t_strdup();
@@ -538,9 +550,15 @@ int main(int argc, const char **argv)
t_strtrim();
t_split();
t_split2();
- t_units();
- t_units_cu();
- t_units_strto();
+ ret = t_units();
+ if (ret != EXIT_SUCCESS)
+ return EXIT_FAILURE;
+ ret = t_units_cu();
+ if (ret != EXIT_SUCCESS)
+ return EXIT_FAILURE;
+ ret = t_units_strto();
+ if (ret != EXIT_SUCCESS)
+ return EXIT_FAILURE;
t_time_units();
t_time_strto();
t_strlcpy();
@@ -549,3 +567,11 @@ int main(int argc, const char **argv)
HX_exit();
return EXIT_SUCCESS;
}
+
+int main(int argc, const char **argv)
+{
+ int ret = runner(argc, argv);
+ if (ret != EXIT_FAILURE)
+ fprintf(stderr, "FAILED\n");
+ return ret;
+}
diff --git a/src/tc-switchuser.c b/src/tc-switchuser.c
index 1763527..4cc5604 100644
--- a/src/tc-switchuser.c
+++ b/src/tc-switchuser.c
@@ -19,7 +19,7 @@ static const struct HXoption options_table[] = {
HXOPT_TABLEEND,
};
-int main(int argc, const char **argv)
+static int runner(int argc, const char **argv)
{
HX_getopt(options_table, &argc, &argv, HXOPT_USAGEONERR);
const char *user = user_name != NULL ? user_name : "-";
@@ -27,12 +27,12 @@ int main(int argc, const char **argv)
switch (HXproc_switch_user(user_name, group_name)) {
case HXPROC_USER_NOT_FOUND:
if (user_name == NULL)
- abort(); /* impossible outcomes */
+ return EXIT_FAILURE; /* impossible outcomes */
printf("No such user \"%s\": %s\n", user_name, strerror(errno));
break;
case HXPROC_GROUP_NOT_FOUND:
if (group_name == NULL || *group_name == '\0')
- abort(); /* impossible outcome */
+ return EXIT_FAILURE; /* impossible outcome */
printf("No such group \"%s\": %s\n", group_name, strerror(errno));
break;
case HXPROC_SETUID_FAILED:
@@ -64,6 +64,14 @@ int main(int argc, const char **argv)
}
return EXIT_SUCCESS;
}
+
+int main(int argc, const char **argv)
+{
+ int ret = runner(argc, argv);
+ if (ret != EXIT_SUCCESS)
+ fprintf(stderr, "FAILED\n");
+ return ret;
+}
#else
int main(void)
{
diff --git a/src/tc-time.c b/src/tc-time.c
index 5097cde..e810233 100644
--- a/src/tc-time.c
+++ b/src/tc-time.c
@@ -207,7 +207,7 @@ static void print_op2(const struct timespec *r, const struct timespec *a,
printf(HX_TIMESPEC_FMT "\n", HX_TIMESPEC_EXP(r));
}
-static void test_add(void)
+static int test_add(void)
{
const struct timespec *a, *b;
struct timespec r, s;
@@ -220,13 +220,14 @@ static void test_add(void)
HX_timespec_add_DIVQ(&s, a, b);
print_op2(&r, a, "+Q", b);
if (r.tv_sec != s.tv_sec || r.tv_nsec != s.tv_nsec)
- abort();
+ return EXIT_FAILURE;
HX_timespec_sub(&r, a, b);
print_op2(&r, a, "- ", b);
printf("----------\n");
}
}
printf("\n");
+ return EXIT_SUCCESS;
}
static void test_adds_nz(time_t s, add_func_t fn)
@@ -303,7 +304,7 @@ static void test_adds(void)
printf("\n");
}
-static void test_mul(void)
+static int test_mul(void)
{
struct timespec r, s;
unsigned int i;
@@ -324,7 +325,7 @@ static void test_mul(void)
printf(HX_TIMESPEC_FMT "\n", HX_TIMESPEC_EXP(&s));
if (r.tv_sec != s.tv_sec || r.tv_nsec != s.tv_nsec)
- abort();
+ return EXIT_FAILURE;
}
for (k = -3; k <= 3; k += 0.1) {
@@ -341,6 +342,7 @@ static void test_mul(void)
}
printf("\n");
+ return EXIT_SUCCESS;
}
static void test_muls_1i(const char *text, mul_func_t fn)
@@ -386,18 +388,29 @@ static void test_muls(void)
printf("\n");
}
-int main(void)
+static int runner(void)
{
if (HX_init() <= 0)
- abort();
-
+ return EXIT_FAILURE;
test_basic();
test_same();
test_neg();
- test_add();
- test_mul();
+ int ret = test_add();
+ if (ret != EXIT_SUCCESS)
+ return ret;
+ ret = test_mul();
+ if (ret != EXIT_SUCCESS)
+ return ret;
test_adds();
test_muls();
HX_exit();
return EXIT_SUCCESS;
}
+
+int main(void)
+{
+ int ret = runner();
+ if (ret != EXIT_SUCCESS)
+ fprintf(stderr, "FAILED\n");
+ return ret;
+}
diff --git a/src/tc-xml.c b/src/tc-xml.c
deleted file mode 100644
index 49b24ad..0000000
--- a/src/tc-xml.c
+++ /dev/null
@@ -1,29 +0,0 @@
-// SPDX-License-Identifier: MIT
-#include <stdbool.h>
-#include <stdio.h>
-#include <libxml/parser.h>
-#include <libHX/defs.h>
-#include <libHX/libxml_helper.h>
-
-int main(void)
-{
- xmlDoc *doc;
- xmlNode *root, *etc, *node;
- char *result = NULL;
- int size = 0;
-
- doc = xmlNewDoc(NULL);
- root = xmlNewDocNode(doc, NULL, "root", NULL);
- xmlDocSetRootElement(doc, root);
- xml_newnode(root, "empty", NULL);
- etc = xml_newnode(root, "filled", NULL);
- xml_newnode(etc, "a", "1234 bytes");
- node = xml_newnode(etc, "b", "0 bytes");
- xml_newnode(node, "extra", NULL);
- xmlDocDumpFormatMemory(doc, reinterpret_cast(xmlChar **, &result),
- &size, true);
- xmlSaveFileEnc("test.xml", doc, "utf-8");
- if (result != NULL)
- printf("%.*s\n", size, result);
- return 0;
-}
diff --git a/src/uxcompat.h b/src/uxcompat.h
deleted file mode 100644
index e735c50..0000000
--- a/src/uxcompat.h
+++ /dev/null
@@ -1,104 +0,0 @@
-#ifndef _LIBHX_UXCOMPAT_H
-#define _LIBHX_UXCOMPAT_H 1
-
-#if defined(__cplusplus) && __cplusplus >= 201100UL
-# include <cstddef>
-# include <cstdint>
-#else
-# include <stddef.h>
-# include <stdint.h>
-#endif
-#include <sys/stat.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef ENOSYS
-# define ENOSYS 38 /* Function not implemented */
-#endif
-
-#ifndef S_IFLNK
-# define S_IFLNK 0xA000
-#endif
-#ifndef S_IFSOCK
-# define S_IFSOCK 0xC000
-#endif
-#ifndef S_IFBLK
-# define S_IFBLK 0x6000
-#endif
-#ifndef S_IFCHR
-# define S_IFCHR 0x2000
-#endif
-#ifndef S_IFIFO
-# define S_IFIFO 0x1000
-#endif
-#ifndef S_ISBLK
-# define S_ISBLK(__mode) (((__mode) & S_IFMT) == S_IFBLK)
-#endif
-#ifndef S_ISCHR
-# define S_ISCHR(__mode) (((__mode) & S_IFMT) == S_IFCHR)
-#endif
-#ifndef S_ISDIR
-# define S_ISDIR(__mode) (((__mode) & S_IFMT) == S_IFDIR)
-#endif
-#ifndef S_ISREG
-# define S_ISREG(__mode) (((__mode) & S_IFMT) == S_IFREG)
-#endif
-#ifndef S_ISLNK
-# define S_ISLNK(__mode) (((__mode) & S_IFMT) == S_IFLNK)
-#endif
-#ifndef S_ISFIFO
-# define S_ISFIFO(__mode) (((__mode) & S_IFMT) == S_IFIFO)
-#endif
-#ifndef S_ISSOCK
-# define S_ISSOCK(__mode) (((__mode) & S_IFMT) == S_IFSOCK)
-#endif
-#ifndef S_IRGRP
-# define S_IRGRP 00040
-#endif
-#ifndef S_IWGRP
-# define S_IWGRP 00020
-#endif
-#ifndef S_IROTH
-# define S_IROTH 00004
-#endif
-#ifndef S_IWOTH
-# define S_IWOTH 00002
-#endif
-
-struct stat;
-
-/*
- * UX-FILE.C
- */
-extern int chown(const char *, long, long);
-extern int fchmod(int, long);
-extern int fchown(int, long, long);
-extern int lchown(const char *, long, long);
-extern int lstat(const char *, struct stat *);
-extern int mkfifo(const char *, long);
-extern int mknod(const char *, long, long);
-extern int readlink(const char *, char *, size_t);
-extern int symlink(const char *, const char *);
-
-/*
- * UX-MMAP.C
- */
-#ifdef _WIN32
-# define MAP_FAILED reinterpret_cast(void *, static_cast(intptr_t, -1))
-# define PROT_NONE 0x0
-# define PROT_READ 0x1
-# define PROT_WRITE 0x2
-# define PROT_EXEC 0x4
-# define MAP_SHARED 0x1
-# define MAP_PRIVATE 0x2
-extern void *mmap(void *, size_t, int, int, int, off_t);
-extern int munmap(void *, size_t);
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* _LIBHX_UXCOMPAT_H */