diff --git a/contrib/gperf/AUTHORS b/contrib/gperf/AUTHORS deleted file mode 100644 index 184c7ce67ce3..000000000000 --- a/contrib/gperf/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -Douglas C. Schmidt -Bruno Haible diff --git a/contrib/gperf/COPYING b/contrib/gperf/COPYING deleted file mode 100644 index 3005d950119c..000000000000 --- a/contrib/gperf/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 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. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) 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 -this service 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 make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. 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. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -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 Program or any portion -of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -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 Program, 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 Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) 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; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, 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 executable. However, as a -special exception, the source code 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. - -If distribution of executable or 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 counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program 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. - - 5. 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 Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program 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 to -this License. - - 7. 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 Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program 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 Program. - -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. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program 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. - - 9. The Free Software Foundation may publish revised and/or new versions -of the 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 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 Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, 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 - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. - - 12. 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 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. - - END OF TERMS AND CONDITIONS - - Appendix: 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 -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. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision 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, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This 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 Library General -Public License instead of this License. diff --git a/contrib/gperf/ChangeLog b/contrib/gperf/ChangeLog deleted file mode 100644 index 42b21d7c329e..000000000000 --- a/contrib/gperf/ChangeLog +++ /dev/null @@ -1,3361 +0,0 @@ -2007-04-30 Brendan Kehoe - - * gperf-3.0.3 released. - * src/version.cc: Bump to 3.0.3. - * tests/*.exp: Bump to 3.0.3 in header. - * doc/gperf.1: Regenerate with gperf 3.0.3. - -2007-04-06 Bruno Haible - - Improve support for mingw. - * tests/Makefile.in (check-c, check-ada, check-modula3, check-pascal, - check-lang-utf8, check-lang-ucs2): Remove '\r' from output before diff. - (POSTPROCESS_FOR_MINGW): New variable. - (check-test): Use it to postprocess output before diff. - -2007-04-04 Bruno Haible - - Support for newer GNU standards. - * doc/configure.ac (mandir): Remove assignment. - * doc/Makefile.in (datarootdir): New variable. - (docdir, dvidir, psdir, pdfdir, htmldir): Use value determined by - autoconf. - * configure.ac: Require autoconf >= 2.60. - * doc/configure.ac: Likewise. - * lib/configure.ac: Likewise. - * src/configure.ac: Likewise. - * tests/configure.ac: Likewise. - * configure: Regenerated with autoconf-2.61. - * doc/configure: Likewise. - * lib/configure: Likewise. - * src/configure: Likewise. - * tests/configure: Likewise. - * src/config.h.in: Likewise. - * src/config.h.msvc: Likewise. - * src/config.h_vms: Likewise. - -2007-04-04 Bruno Haible - - * doc/Makefile.in (MAKEINFO): Disable also the LC_MESSAGES and LC_ALL - environment variables. - -2007-04-04 Bruno Haible - - * configure.ac: Renamed from configure.in. - * doc/configure.ac: Renamed from doc/configure.in. - * lib/configure.ac: Renamed from lib/configure.in. - * src/configure.ac: Renamed from src/configure.in. - * tests/configure.ac: Renamed from tests/configure.in. - * Makefile.devel: Update. - * INSTALL: Update. - -2007-03-31 Bruno Haible - - * tests/test.c (in_word_set): New declaration. - * tests/test2.c (in_word_set): Likewise. - -2007-03-31 Bruno Haible - - * src/options.cc (Options::parse_options): Bump copyright year. - -2007-03-31 Bruno Haible - - * doc/gperf.texi: Fix typo. - -2007-03-31 Bruno Haible - - Change generated code after the meaning of __inline is changed in - GCC 4.3. - * src/output.cc (Output::output_lookup_function): Emit an inline - marker that also works with gcc-4.3 in c99 or gnu99 mode. - * tests/c-parse.exp, tests/charsets.exp, tests/chill.exp, - tests/cplusplus.exp, tests/gpc.exp, tests/incomplete.exp, - tests/java.exp, tests/languages.exp, tests/modula2.exp, - tests/objc.exp, tests/permut2.exp, tests/permut3.exp, - tests/permutc2.exp, tests/test-4.exp: Update. - Reported by Bruce Korb . - -2006-06-29 Brendan Kehoe - - * gperf-3.0.2 released. - - * doc/Makefile.in (all): No longer depend on dvi. - -2006-01-22 Brendan Kehoe - - * doc/gperf.texi: Update copyright to be 1989-2006. - (UPDATED): Change to 22 January 2006. - * doc/gperf.1 (TH): Fix date. - * configure.in: Update copyright years. - * configure: Regenerate. - * src/Makefile.in: Update copyright years. - - * doc/gperf.{dvi,ps,pdf}: Regenerated by manually invoking tex - instead of trying to use texi2dvi, whose run of etex ends up - actually always running pdfetex, thus always recreating gperf.pdf. - -2006-01-13 Brendan Kehoe - - * NEWS: Add note about #line directive fix. - * doc/gperf.1: Regenerate with Makefile.devel. - - * doc/gperf.texi (UPDATED): Correct to be today. - * doc: Regenerated by doing make in a configured tree. - Requires makeinfo, texi2dvi, texi2pdf, and texi2html. - - * configure.in: Add AC_OBJEXT and AC_EXEEXT. - * lib/Makefile.in (OBJEXT): Define for subst. - (OBJECTS): Use $(OBJEXT) instead of '.o'. - * src/Makefile.in: Make dependencies use $(OBJEXT). - (OBJEXT, EXEEXT): Define for subst. - (TARGETPROG): Add $(EXEEXT). - (OBJECTS): Use $(OBJEXT) instead of '.o'. - (clean): Remove *.$(OBJEXT) instead of *.o. - -2006-01-13 Bruno Haible - - Fix #line directives for filenames containing backslashes. - * src/output.cc (output_line_directive): New function. - (output_keyword_entry, Output::output): Use it. - Reported by Alexander . - - * src/options.cc (Options::parse_options): Update years in --version - output. - -2005-08-29 Brendan Kehoe - - * src/keyword.cc: Tweak comment to avoid nesting. - -2005-08-27 Bruno Haible - - Fix missing ranlib detection when cross-compiling. - * aclocal.m4 (CL_PROG_RANLIB): Remove macro. - * lib/configure.in: Use AC_PROG_RANLIB instead of CL_PROG_RANLIB. - -2005-07-30 Bruno Haible - - * src/version.cc: Bump version number to 3.0.2. - * doc/gperf.texi: Likewise. - * tests/c-parse.exp, tests/charsets.exp, tests/chill.exp, - tests/cplusplus.exp, tests/gpc.exp, tests/incomplete.exp, - tests/java.exp, tests/languages.exp, tests/modula2.exp, - tests/objc.exp, tests/permut2.exp, tests/permut3.exp, - tests/permutc2.exp, tests/test-4.exp: Update. - -2005-07-30 Bruno Haible - - * src/positions.h: Add forward declarations of friend classes. - Needed for compilation with g++ 4.0. - -2004-08-22 Bruno Haible - - * tests/Makefile.in (check-lang-syntax): Add test for the - --length-table-name option. - * tests/test-6.exp: Update. - -2004-08-21 Bruce Lilly - - * src/input.cc (Input::read_input): Accept length-table-name - declaration. - * src/options.h (Options::get_lengthtable_name, - Options::set_lengthtable_name): New declarations. - (Options): Add field _lengthtable_name. - * src/options.icc (Options::get_lengthtable_name): New inline method. - * src/options.cc (DEFAULT_LENGTHTABLE_NAME): New constant. - (Options::long_usage): Document --length-table-name option. - (Options::Options): Initialize _lengthtable_name field. - (Options::~Options): Update. - (Options::set_lengthtable_name): New method. - (long_options): Add option --length-table-name. - (Options::parse_options): Implement --length-table-name option. - * src/output.cc (Output::output_keylength_table, output_switch_case, - Output::output_lookup_function_body): Use option.get_lengthtable_name. - * doc/gperf.texi (Gperf Declarations): Document %define - length-table-name. - (Output Details): Document --length-table-name option. - -2003-06-12 Bruno Haible - - * gperf-3.0.1 released. - - * src/version.cc: Bump version number to 3.0.1. - * doc/gperf.texi: Likewise. - * tests/c-parse.exp, tests/charsets.exp, tests/chill.exp, - tests/cplusplus.exp, tests/gpc.exp, tests/incomplete.exp, - tests/java.exp, tests/languages.exp, tests/modula2.exp, - tests/objc.exp, tests/permut2.exp, tests/permut3.exp, - tests/permutc2.exp, tests/test-4.exp: Update. - -2003-05-31 Bruno Haible - - * doc/gperf.texi (User-supplied Struct): Mention the possibility of an - abbreviated struct declaration. - * src/input.cc (Input::read_input): Support struct declarations of the - form "struct foo;". - * tests/incomplete.gperf: New file. - * tests/incomplete.exp: New file. - * tests/Makefile.in (check-test): Check incomplete.gperf too. - Reported by Rob Leslie . - -2003-05-20 Bruno Haible - - * doc/Makefile.in (gperf.ps): Don't use $< in a target rule. - -2003-05-27 Bruno Haible - - * Makefile.vms (CC): Correct value. - (getopt.obj, getopt1.obj, getline.obj, hash.obj): Don't set - HAVE_CONFIG_H. - -2003-05-17 Bruno Haible - - * Makefile.msvc (DEBUGFLAGS): New variable. - (gperf.exe): Use it, and MFLAGS too. - -2003-05-08 Bruno Haible - - * gperf-3.0 released. - -2003-05-07 Bruno Haible - - * src/version.cc: Bump version number to 3.0. - * doc/gperf.texi: Likewise. - * tests/c-parse.exp, tests/charsets.exp, tests/chill.exp, - tests/cplusplus.exp, tests/gpc.exp, tests/java.exp, - tests/languages.exp, tests/modula2.exp, tests/objc.exp, - tests/permut2.exp, tests/permut3.exp, tests/permutc2.exp, - tests/test-4.exp: Update. - - * src/configure.in: Fix AC_INIT argument. - - * Makefile.devel (configure, lib/configure, src/configure, - tests/configure, doc/configure): Use the newest autoconf. - (src/config.h.in): Use the newest autoheader. - -2003-05-03 Bruno Haible - - * doc/gperf.texi: Use two spaces as sentence separator, as recommended - by the texinfo manual. - -2003-04-12 Bruno Haible - - * doc/configure.in (mandir): Change default value. - * doc/Makefile.in (docdir): Use datadir instead of prefix. - * Makefile.msvc (datadir): New variable. - (mandir, docdir): Use it instead of prefix. - (install, installdirs): Update. - * Makefile.vms (datadir): New variable. - (mandir, docdir): Use it instead of prefix. - (install, installdirs): Update. - -2003-04-12 Bruno Haible - - * README.vms: New file. - * Makefile.vms: New file. - * Makefile.devel (src/config.h_vms): New rule. - (all): Depend on it. - -2003-03-19 Bruno Haible - - * src/input.cc (Input::read_input): Ignore comments at the beginning - of the declarations section. - * doc/gperf.texi (Controls for GNU indent): New section. - Reported by Bruce Lilly . - -2003-03-19 Bruno Haible - - * src/output.cc (Output::output_hash_function): Avoid lint warning if - not all arguments of the hash function are used. Avoid lint warning - for fallthrough in switch. - * tests/c-parse.exp, tests/charsets.exp, tests/chill.exp, - tests/cplusplus.exp, tests/java.exp, tests/languages.exp, - tests/modula2.exp, tests/objc.exp: All /*FALLTHROUGH*/ to expected - output. - Reported by Bruce Lilly . - -2003-03-01 Bruno Haible - - * src/options.h (Options::set_initializer_suffix): New declaration. - * src/options.cc (Options::set_initializer_suffix): New method. - * src/input.cc (Input::read_input): Recognize %define - initializer-suffix. - * doc/gperf.texi (Gperf Declarations): Document %define - initializer-suffix. - * NEWS: Update. - -2003-02-26 Bruno Haible - - * Makefile.msvc: New file. - * README.woe32: New file. - * Makefile.devel (all): Depend on src/config.h.msvc. - (src/config.h.msvc): New rule. - -2003-01-07 Bruno Haible - - * src/input.h (Input::_charset_dependent): New field. - * src/input.cc (Input::read_input): Also set _charset_dependent. - * src/main.cc (main): Pass _charset_dependent from Input to Output. - * src/output.h (Output::Output): Add charset_dependent argument. - (Output::_charset_dependent): New field. - * src/output.cc (Output::Output): Add charset_dependent argument. - (Output::output): Provoke a compilation error if the execution - character set doesn't match the expectations. - * tests/c-parse.exp, tests/charsets.exp, tests/chill.exp, - tests/cplusplus.exp, tests/gpc.exp, tests/java.exp, - tests/languages.exp, tests/modula2.exp, tests/objc.exp, - tests/permut2.exp, tests/permut3.exp, tests/permutc2.exp, - tests/test-4.exp: Update. - - * src/options.cc (Options::long_usage): Change bug report address to - . - * tests/test-6.exp: Update. - - * src/output.cc (USE_DOWNCASE_TABLE): New macro. - (output_upperlower_table): New function. - (output_upperlower_strcmp, output_upperlower_strncmp, - output_upperlower_memcmp): Emit gperf_downcase array accesses. - (Output::output): Call output_upperlower_table. - * tests/permutc2.exp: Update. - - * src/keyword-list.icc (KeywordExt_List::rest): Use a portable cast. - (Only in GCC a cast of an lvalue is an lvalue.) - -2003-01-01 Bruno Haible - - * src/options.cc (Options::parse_options): Update copyright year. - - * doc/gperf.texi (@author): Add me. - - * src/options.h (NULLSTRINGS): New enum value. - (Options::get_stringpool_name, Options::set_stringpool_name): New - method declarations. - (Options::_stringpool_name): New field. - * src/options.icc (Options::get_stringpool_name): New method. - * src/options.cc (DEFAULT_STRINGPOOL_NAME): New variable. - (Options::long_usage): Document -Q and --null-strings. - (Options::Options): Initialize _stringpool_name. - (Options::~Options): Output _stringpool_name, NULLSTRINGS values too. - (Options::set_stringpool_name): New method. - (long_options): Add options --string-pool-name, --null-strings. - (Options::parse_options): Implement options -P, -Q and --null-strings. - * src/input.cc (Input::read_input): Recognize declarations %pic, - %define string-pool-name, %null-strings. - * src/output.h (Output::output_string_pool, - Output::output_lookup_pools): New method declarations. - (Output::_wordlist_eltype): New field. - * src/output.cc (Output::output_keylength_table): Trivial - simplification. - (Output::output_string_pool): New method. - (output_keyword_entry): Add stringpool_index argument. For SHAREDLIB, - use struct offsets. - (output_keyword_blank_entries): For SHAREDLIB, use -1 instead of "". - (Output::output_keyword_table): Use _wordlist_eltype instead of - _struct_tag. Compute stringpool_index for output_keyword_entry. - (Output::output_lookup_pools): New method. - (Output::output_lookup_function_body): Use _wordlist_eltype instead of - _struct_tag. For SHAREDLIB, use "+ stringpool" to convert offsets to - strings. Use "o >= 0" to test for nonempty table entry. - (Output::output_lookup_function): Call output_lookup_pools. - (Output::output): Initialize _wordlist_eltype. Call - output_lookup_pools. - * tests/jstest4.gperf: New file. - * tests/test-6.exp: Update. - * tests/Makefile.in (check-lang-syntax): Drop test of -p. Add tests of - -P and -Q. - * doc/gperf.texi (User-supplied Struct): Mention that first field has - to be of type 'int' if -P is given. - (Gperf Declarations): Document %pic, %define string-pool-name, - %null-strings. - (Output Details): Update description of option -P. Document options -Q - and --null-strings. - - * tests/Makefile.in (check-link-c, check-ada, check-pascal, - check-test): Omit option -p. - * tests/c-parse.exp: Regenerated. - * tests/chill.exp: Regenerated. - * tests/cplusplus.exp: Regenerated. - * tests/gpc.exp: Regenerated. - * tests/java.exp: Regenerated. - * tests/objc.exp: Regenerated. - * tests/test-4.exp: Regenerated. - - * src/output.cc (Output::output_lookup_function_body): Omit the - multicompare code section and its variables when it is not used. - * tests/chill.exp: Regenerated. - - * src/output.c (Output_Compare::output_firstchar_comparison): New - method. - (Output_Compare_Strcmp::output_comparison, - Output_Compare_Strncmp::output_comparison, - Output_Compare_Memcmp::output_comparison): Use it. - * tests/permutc2.exp: Update. - - * tests/smtp.gperf: New file, based on a contribution by Bruce Lilly. - * tests/Makefile.in (check-smtp): New rule. - (check): Depend on it. - (clean): Update. - -2002-12-12 Bruno Haible - - * src/search.h (Search::init_selchars_tuple, - Search::count_duplicates_tuple): Add alpha_unify argument. - (Search::count_duplicates_tuple): New method declaration. - * src/search.cc (Search::init_selchars_tuple, - Search::count_duplicates_tuple): Add alpha_unify argument. - (Search::find_positions): Update. - (Search::count_duplicates_tuple): New method. - (Search::count_duplicates_multiset): Free temp alpha_unify vector. - (Search::find_alpha_inc): Call count_duplicates_tuple. - - * src/configure.in: Add test for stack-allocated variable-size arrays. - * src/config.h.in: Regenerated. - * src/search.cc: Include config.h. - (DYNAMIC_ARRAY, FREE_DYNAMIC_ARRAY): New macros. - (Search::find_alpha_inc, Search::count_possible_collisions, - Search::find_asso_values): Use them. - * src/Makefile.in (search.o): Depend on config.h. - - * src/search.h (Search::keyword_list_length, Search::max_key_length, - Search::get_max_keysig_size, Search::prepare): Remove declarations. - (Search::prepare): Renamed from Search::preprepare. - (Search::_max_selchars_length): New field. - * src/search.cc (Search::prepare): Renamed from Search::preprepare. - (Search::prepare_asso_values): Merged with old Search::prepare. - Initialize _max_selchars_length. - (Search::keyword_list_length): Remove function. Use _list_len instead. - (Search::max_key_length): Remove function. Use _max_key_len instead. - (Search::get_max_keysig_size): Remove function. Use - _max_selchars_length instead. - (Search::count_possible_collisions, Search::find_asso_values): Update. - (Search::find_good_asso_values): Call just prepare_asso_values. - (Search::~Search): Update. - - * src/output.h (Output::output_asso_values_ref): New declaration. - * src/output.cc (char_to_index): Remove variable. - (Output::output_asso_values_ref): New function. - (Output::output_hash_function): Use it. - (Output::output): Update. - - * src/positions.h (Positions::is_useall, Positions::set_useall, - Positions::iterator, Positions::reviterator): New method declarations. - (Positions::_useall): New field. - (PositionIterator): Make constructor private. Add a constructor and a - copy constructor. - (PositionIterator::remaining): New declaration. - (PositionReverseIterator): Make constructor private. Add a constructor - and a copy constructor. - (PositionReverseIterator::remaining): New declaration. - (PositionReverseIterator::_minindex): New field. - * src/positions.icc (Positions::Positions): Initialize _useall. - (Positions::operator=): Likewise. - (Positions::is_useall, Positions::set_useall): New methods. - (Positions::sort): Do nothing if _useall is set. - (Positions::iterator, Positions::reviterator): New methods. - (PositionIterator::PositionIterator): New constructor. - (PositionIterator::remaining): New method. - (PositionReverseIterator::PositionReverseIterator): New constructor. - (PositionReverseIterator::next): Use _minindex as bound. - (PositionReverseIterator::remaining): New method. - * src/positions.cc (Positions::add, Positions::remove): Reset the - useall flag. - (Positions::print): Handle the useall case. - * src/options.h (ALLCHARS): Remove. - * src/options.cc (Options::~Options): Update. - (Options::parse_options): Use Positions::set_useall(). - * src/keyword.h (KeywordExt::init_selchars_tuple, - KeywordExt::init_selchars_multiset, KeywordExt::init_selchars_low): - Remove use_all_chars argument. - * src/keyword.cc (KeywordExt::init_selchars_low): Remove use_all_chars - argument. Tell the position iterator to stop at _allchars_length. - Remove special case code for -k'*'. - (KeywordExt::init_selchars_tuple, KeywordExt::init_selchars_multiset): - Remove use_all_chars argument. - * src/search.h (Search::init_selchars_tuple): Remove use_all_chars - argument. - (Search::init_selchars_multiset): Likewise. - * src/search.cc (Search::init_selchars_tuple): Remove use_all_chars - argument. - (Search::count_duplicates_tuple, Search::find_positions): Update. - (Search::compute_alpha_unify): Remove special case code for -k'*'. - (Search::init_selchars_multiset): Remove use_all_chars argument. - (Search::count_duplicates_multiset): Update. - (Search::find_alpha_inc): Remove special case code for -k'*'. - (Search::prepare): Update. - (Search::get_max_keysig_size): Update. - * src/output.cc (Output::output_hash_function): Remove special case - code for -k'*'. - * tests/chill.exp: Regenerated. - -2002-12-11 Bruno Haible - - Change the positions to be 0-based, instead of 1-based. - * src/positions.h (Positions::LASTCHAR): Set to -1. - (Positions::MAX_SIZE): New constant. - (Positions::pointer): Change return type. - (Positions::_positions): Change element type. - (PositionIterator::EOS, PositionReverseIterator::EOS): Set to -2. - * src/positions.icc (Positions::pointer): Change return type. - (Positions::sort): Update. - * src/positions.cc (Positions::contains, Positions::add, - Positions::remove): Update. - (Positions::print): Update. Fix off-by-one bug. - * src/options.cc (Options::~Options): Update. - (Options::parse_options): Set BAD_VALUE to -3. Update. - * src/keyword.cc (KeywordExt::init_selchars_low): Update. - * src/search.cc (Search::find_positions, Search::compute_alpha_unify, - Search::find_alpha_inc): Update. - * src/output.cc (Output::output_hash_function): Update. Don't emit - a 'case' statement right after 'default:'. - * tests/c-parse.exp: Regenerated. - * tests/charsets.exp: Regenerated. - * tests/cplusplus.exp: Regenerated. - * tests/java.exp: Regenerated. - * tests/languages.exp: Regenerated. - * tests/modula2.exp: Regenerated. - * tests/objc.exp: Regenerated. - -2002-12-10 Bruno Haible - - * src/options.h: Reorder enum values. - (Options::short_usage, Options::long_usage): Make static. - * src/options.cc (Options::short_usage); No longer print a monster - usage line. - (Options::print_options): Improve output of options like - --key-positions=1,2,$. - (Options::~Options): Update. - - * src/options.h (UPPERLOWER): New enum value. - * src/options.cc (Options::long_usage): Document option --ignore-case. - (Options::~Options): Update. - (long_options): Add option --ignore-case. - (Options::parse_options): Handle option --ignore-case. - * src/input.cc (Input::read_input): Recognize option %ignore-case. - * src/keyword.h (KeywordExt::init_selchars_tuple, - KeywordExt::init_selchars_multiset, KeywordExt::init_selchars_low): - Add alpha_unify argument. - * src/keyword.cc (KeywordExt::init_selchars_low): Add alpha_unify - argument. - (KeywordExt::init_selchars_tuple): Add alpha_unify argument. - (KeywordExt::init_selchars_multiset): Add alpha_unify argument. - * src/search.h (Search::compute_alpha_size, - Search::compute_alpha_unify): New declarations. - (Search::init_selchars_multiset): Add alpha_unify argument. - (Search::_alpha_unify): New field. - * src/search.cc (Search::compute_alpha_size, - Search::compute_alpha_unify): New functions. - (Search::init_selchars_tuple): Update. - (Search::find_positions): Temporarily set _alpha_unify. Perform a - case insensitive comparison if needed. - (Search::init_selchars_multiset): Add alpha_unify argument. - (Search::count_duplicates_multiset): Call compute_alpha_unify. - (Search::find_alpha_inc): Temporarily set _alpha_unify. At the end, - set _alpha_size and _alpha_unify. - (Search::prepare): Update. Don't compute _alpga_size here. - (Search::optimize): Propagate unified asso_values. - (Search::~Search) Delete _alpha_unify. - * src/output.cc (output_upperlower_strcmp, output_upperlower_strncmp, - output_upperlower_memcmp): New functions. - (Output_Compare_Strcmp::output_comparison, - Output_Compare_Strncmp::output_comparison, - Output_Compare_Memcmp::output_comparison): Use the case-insensitive - comparison function if --ignore-case was given. - (Output::output): Emit the auxiliary case-insensitive comparison - function if needed. - * tests/permutc2.gperf, tests/permutc2.exp: New files. - * tests/Makefile.in (check-test): Also check permutc2.gperf. - * tests/test-6.exp: Update. - * doc/gperf.texi (Gperf Declarations): Document %ignore-case. - (Input Details): Document option --ignore-case. - * NEWS: Update. - - * src/search.cc (Search::optimize): Fill unused asso_values[] entries - with a large value. - * src/output.h (Output::Output): Remove occurrences argument. - (Output::_occurrences): Remove field. - * src/output.cc (Output::Output): Remove occurrences argument. - (Output::output_hash_function): Ignore _occurrences. - * src/main.cc (main): Don't pass the _occurrences to Output. - - * src/search.cc (Search::preprepare): Exit if keywords contain - out-of-range characters. - - * src/search.cc (for): Define so as to avoid errors with old compilers. - - * src/options.h (SHAREDLIB): New enum value. - * src/options.cc (Options::short_usage): Mention option -P. - (Options::long_usage): Document option -P. - (long_options): Add option --pic. - (Options::parse_options): Handle option -P/--pic. - * src/output.cc (output_keyword_blank_entries): When SHAREDLIB is - specified, emit NULL pointers instead of "". - (Output::output_lookup_function_body): When SHAREDLIB is specified - and SWITCH and DUP and not specified, test the table entry against - NULL before the string comparison. - * tests/test-6.exp: Update. - * doc/gperf.texi (Output Details): Document option -P. - * NEWS: Update. - Suggested by Ulrich Drepper. - -2002-12-08 Bruno Haible - - * tests/permut2.gperf, tests/permut2.exp: New files. - * tests/permut3.gperf, tests/permut3.exp: New files. - * tests/charsets.gperf: New file, from Bruce Lilly. - * tests/charsets.exp: New file. - * tests/languages.gperf: New file, from Bruce Lilly. - * tests/languages.exp: New file. - * Makefile.in (check-test): Test them all. - - Completely new asso_values search algorithm. - * src/search.h (Search::compute_occurrence, Search::clear_determined, - Search::set_determined, Search::already_determined, Search::reorder): - Remove functions. - (Search::init_asso_values, Search::sort_by_occurrence, - Search::compute_occurrence, Search::sort_by_occurrence, - Search::has_collisions, Search::collision_prior_to): Remove functions. - (Search::compute_partition, Search::count_possible_collisions, - Search::unchanged_partition): New method declarations. - (Search::_determined): Remove field. - * src/search.cc (Search::prepare): Don't initialize _determined. - (Search::compute_occurrence, greater_by_occurrence, - Search::clear_determined, Search::set_determined, - Search::already_determined, Search::reorder): Remove functions. - (Search::init_asso_values, compute_disjoint_union, - Search::sort_by_occurrence, Search::compute_occurrence, - Search::sort_by_occurrence, Search::has_collisions, - Search::collision_prior_to): Remove functions. - (StackEntry): Remove class. - (EquivalenceClass, Step): New classes. - (equals, Search::compute_partition, delete_partition, - Search::count_possible_collisions, Search::unchanged_partition): New - functions. - (Search::find_asso_values): Completely rewritten. - (Search::find_good_asso_values): Don't call reorder(). - (Search::~Search): Don't free _determined. - * src/keyword.h (KeywordExt::_occurrence): Remove field. - * src/options.h (ORDER, FAST, OPT_CHOICE): Remove enum values. - (Options::_iterations): Remove field. - * src/options.icc (Options::get_iterations): Remove method. - * src/options.cc (Options::long_usage): Remove mention of -f and -o. - (Options::Options): Don't initialize _iterations. - (Options::~Options): Update. - (Options::parse_options): Do nothing for options -f, -o, -O. - * doc/gperf.texi: (Contributors): Update. - (Algorithmic Details): Remove options -f and -o. Update description - of option -s. - * tests/c-parse.exp, tests/chill.exp, tests/cplusplus.exp, - tests/gpc.exp, tests/java.exp, tests/modula2.exp, tests/objc.exp, - tests/test-4.exp): Regenerated, smaller than before. - * tests/test-6.exp: Update. - * NEWS: Update. - -2002-12-08 Bruno Haible - - * src/search.h (Search::_alpha_size): Change type to 'unsigned int'. - (Search::_asso_value_max): Likewise. - * src/search.cc (Search::prepare_asso_values): Update. - (Search::init_asso_values): Update. - (Search::~Search): Update. - * src/output.h (Output::Output): Change alpha_size type to - 'unsigned int'. - (Output::_alpha_size): Change type to 'unsigned int'. - * src/output.cc (Output::Output): Change alpha_size type to - 'unsigned int'. - (Output::output_hash_function): Update. - -2002-12-07 Bruno Haible - - * src/options.h (OPT_CHOICE): New enum value. - * src/options.cc (Options::~Options): Update. - (long_options): New option --optimized-collision-resolution. - (Options::parse_options): Accept option -O. - * src/search.h (Search::sort_by_occurrence): Change argument to - 'unsigned int'. - (Search::compute_occurrence, Search::sort_by_occurrence): New method - declarations. - * src/search.cc (Search::sort_by_occurrence): Change argument to - 'unsigned int'. - (Search::compute_occurrence, Search::sort_by_occurrence): New methods. - (Search::find_asso_values): Implement OPT_CHOICE. More debugging - output. - - * src/search.cc (Search::prepare_asso_values) [DEBUG]: Also print - the keyword list in order. - (Search::find_asso_values) [DEBUG]: Upon failure, print the union_set. - - * src/options.h (Options::get_size_multiple): Change return type to - float. - (Options::_size_multiple): Change type to float. - * src/options.icc (Options::get_size_multiple): Change return type to - float. - * src/options.cc (Options::long_usage): Update description of option - -s. - (Options::~Options): Update. - (Options::parse_options): For option -s, accept a fraction. - * src/search.cc (Search::prepare_asso_values): Use get_size_multiple - as it is. - * tests/test-6.exp: Update. - * doc/gperf.texi (Algorithmic Details): Update description of option - -s. - -2002-12-04 Bruno Haible - - Improve debugging output. - * src/hash-table.h (Hash_Table::dump): New method. - * src/hash-table.cc (Hash_Table::dump): New method, extracted from - destructor. - (Hash_Table::~Hash_Table): No longer print the contents. - * src/positions.h (PositionReverseIterator): New class. - * src/positions.icc (PositionReverseIterator::PositionReverseIterator, - PositionReverseIterator::next): New methods. - * src/search.cc (Search::find_positions): If debugging, print the - result. - (Search::find_alpha_inc): If debugging, print the result. - (Search::prepare): Explicitly dump the hash table's contents here. - - Portability fixes. - * src/positions.h (Positions::LASTCHAR, Positions::MAX_KEY_POS, - PositionIterator::EOS): Define as compile-time constants using enum. - * src/bool-array.cc (Bool_Array::~Bool_Array): Remove const qualifier - of pointer to be deleted. - * src/input.cc (Input::~Input): Likewise. - * src/keyword.cc (KeywordExt::delete_selchars): Likewise. - * src/main.cc (main): Likewise. - * src/hash-table.cc (Hash_Table::~Hash_Table): Limit scope of 'for' - variables. - * src/search.cc (Search::prepare_asso_values): Use a static_cast to - convert from time_t to long. This is possible because ISO C 99 says - time_t is a numeric type. - -2002-11-20 Bruno Haible - - * src/search.cc (Search::find_asso_values): Avoid gcc warnings about - uninitialized variables. - - Implement backtracking. - * src/search.h (Search::has_collisions): Renamed from - Search::less_collisions. Return a boolean. - * src/search.cc (Search::has_collisions): Renamed from - Search::less_collisions. Return a boolean. - (StackEntry): Remove field _collisions_so_far. - (Search::find_asso_values): Backtrack when encountering an unresolved - collision. Assume collisions_so_far is always zero. - (Search::optimize): Exit if there are accidental duplicates at the end. - * src/output.cc (Output::num_hash_values): Simply return the list - length. - (Output::output_keylength_table): Remove handling of accidental - duplicates. - (Output::output_keyword_table, Output::output_lookup_array): Likewise. - (output_switch_case, output_switches): Likewise. - * doc/gperf.texi (Algorithmic Details): Adjust description of options - -D, -f, -o, -r. - (Bugs): Remove note about missing backtracking. - (Projects): Likewise. - -2002-11-19 Bruno Haible - - Prepare for backtracking. - * src/search.h (Search::try_asso_value, Search::change_some_asso_value): - Remove declarations. - (Search::less_collisions, Search::collision_prior_to): New declarations. - (Search::_fewest_collisions, Search::_union_set, Search::_num_done): - Remove fields. - * src/search.cc (Search::prepare_asso_values): Don't initialize - _union_set. - (Search::try_asso_value, Search::change_some_asso_value): Remove - methods. - (Search::less_collisions, Search::collision_prior_to): New methods. - (StackEntry): New class. - (Search::find_asso_values): Reorganized to use pseudo-recursion. - (Search::~Search): Don't free _union_set. - - * src/search.h (Search::find_good_asso_values): New declaration. - * src/search.cc: Add comments about the basic structure of the - algorithm. - (Search::find_positions): Move the option[POSITIONS] test to here. - (Search::find_good_asso_values): New method, extracted from - Search::optimize. - (Search::optimize): Remove option[POSITIONS] test. Call - find_good_asso_values. - -2002-11-17 Bruno Haible - - * src/options.cc (Options::parse_options): Include copyright notice - and authors in --version output. - - Avoid artificial duplicates. - * src/keyword.h (KeywordExt::init_selchars_tuple): New declaration. - (KeywordExt::init_selchars_multiset): Renamed from - KeywordExt::init_selchars. - (KeywordExt::init_selchars_low): New declaration. - * src/keyword.cc (KeywordExt::init_selchars_low): Renamed from - KeywordExt::init_selchars. Add alpha_inc argument. Remove sorting. - (KeywordExt::init_selchars_tuple): New method. - (KeywordExt::init_selchars_multiset): New method, replaces - KeywordExt::init_selchars. - * src/search.h (Search::init_selchars_tuple): Renamed from - Search::init_selchars. - (Search::count_duplicates_tuple): Renamed from Search::count_duplicates. - (Search::init_selchars_multiset, Search::count_duplicates_multiset, - Search::find_alpha_inc): New declarations. - (Search::_alpha_inc): New field. - (Search::_alpha_size, Search::_occurrences, Search::_asso_values, - Search::_determined): Make non-const. - * src/search.cc (Search::Search): Don't initialize _key_positions, - _alpha_size, _occurrences, _asso_values, _determined here. - (Search::init_selchars_tuple): Renamed from Search::init_selchars. - (Search::count_duplicates_tuple): Renamed from Search::count_duplicates. - (Search::find_positions): Update. - (Search::init_selchars_multiset, Search::count_duplicates_multiset, - Search::find_alpha_inc): New methods. - (Search::prepare): Move preprepare, find_positions calls away. - Initialize _alpha_size, _occurrences, _asso_values, _determined here. - (Search::optimize): Call preprepare, find_positions here. Initialize - _key_positions here. - (Search::~Search): Deallocate _alpha_inc. - * src/output.cc (Output::Output): Add alpha_inc argument. - (Output::output_hash_function): Use _alpha_inc. - * src/output.h (Output::Output): Add alpha_inc argument. - (Output::_alpha_inc): New field. - * src/main.cc (main): Pass _alpha_inc from Search to Output. - * tests/chill.exp: Update. - * doc/gperf.texi (Algorithmic Details): Remove description of - artificial duplicates. - - * src/keyword.h (KeywordExt::_selchars): Change type to - 'const unsigned int *'. - * src/keyword.cc (sort_char_set): Change argument type to - 'unsigned int *'. - (KeywordExt::init_selchars): Update. - * src/search.h (Search::sort_by_occurrence): Change argument type to - 'unsigned int *'. - (Search::try_asso_value): Change argument type to 'unsigned int'. - (Search::_union_set): Change type to 'unsigned int *'. - * src/search.cc (Search::prepare, Search::compute_occurrence, - Search::set_determined, Search::already_determined, - Search::prepare_asso_values, Search::compute_hash): Update. - (compute_disjoint_union): Change argument types to 'unsigned int *'. - (Search::sort_by_occurrence): Likewise. - (Search::try_asso_value): Change argument type to 'unsigned int'. - (Search::change_some_asso_value, Search::~Search): Update. - * src/hash-table.cc (Hash_Table::~Hash_Table, Hash_Table::equal, - Hash_Table::insert): Update. - - * src/positions.h: New file, extracted from options.h. - * src/positions.icc: New file, extracted from options.icc. - * src/positions.cc: New file, extracted from options.cc. - * src/options.h: Include positions.h. Move classes Positions and - PositionsIterator away. - * src/options.icc: Move classes Positions and PositionsIterator away. - * src/options.cc: Move class Positions away. - * src/keyword.cc: Include positions.h instead of options.h. - * src/output.h: Include positions.h instead of options.h. - * src/search.h: Include positions.h instead of options.h. - * src/Makefile.in (OBJECTS): Add positions.o. - (POSITIONS_H): New variable. - (OPTIONS_H, SEARCH_H, OUTPUT_H, keyword.o): Use it. - (positions.o): New rule. - - * src/options.h (POSITIONS): New enum value. - (Positions::Positions): New copy constructor. - (Positions::operator=, Positions::contains, Position::add, - Positions::remove, Positions::print): New method declaration. - (Options::get_max_keysig_size): Remove method. - * src/options.icc (Positions::Positions): New copy constructor. - (Positions::operator=): New method. - (Options::get_max_keysig_size): Remove method. - * src/options.cc (Options::Options): Initialize _key_positions - trivially. - (Options::parse_options): Option -k sets POSITIONS. - (Positions::contains, Positions::add, Positions::remove, - Positions::print): New methods. - * src/hash-table.cc (Hash_Table::~Hash_Table): Compute the field - width explicitly, instead of using Options::get_max_keysig_size. - * src/keyword.h (KeywordExt::init_selchars): Add arguments - use_all_chars, positions. - (KeywordExt::delete_selchars): New declaration. - * src/keyword.cc (KeywordExt::init_selchars): Add arguments - use_all_chars, positions. Remove error message if there are no key - positions. - (KeywordExt::delete_selchars): New method. - * src/search.h: Include options.h. - (Search::preprepare, Search::init_selchars, Search::delete_selchars, - Search::count_duplicates, Search::find_positions): New declarations. - (Search::_key_positions): New field. - * src/search.cc (Search::Search): Initialize _key_positions. - (Search::preprepare, Search::init_selchars, Search::delete_selchars, - Search::count_duplicates, Search::find_positions): New functions. - (Search::prepare): Call preprepare and find_positions. Tweak error - message. - (Search::get_max_keysig_size): Use _key_positions instead of - option.get_key_positions(). - (Search::optimize): Tweak error message. - * src/output.h: Include options.h. - (Output::Output): Add Positions argument. - (Output::_key_positions): New field. - * src/output.cc (Output::Output): Add Positions argument. - (Output::output_hash_function): Omit the table if there are no - positions at all. Use _key_positions instead of - option.get_key_positions(). - (Output::output): Output the computed positions as a comment. - * src/main.cc (main): Pass the Positions from Searcher to Output. - * src/Makefile.in (SEARCH_H, OUTPUT_H): Include OPTIONS_H. - * tests/Makefile.in (check-test): Pass key positions explicitly. - * tests/gpc.exp: Update. - * tests/test-4.exp: Update. - * doc/gperf.texi (Algorithmic Details): Mention that -k is not needed - usually. - -2002-11-16 Bruno Haible - - * src/options.h (Options::get_slot_name): Renamed from - Options::get_key_name. - (Options::set, Options::set_language, Options::set_total_switches, - Options::set_function_name, Options::set_slot_name, - Options::set_class_name, Options::set_hash_name, - Options::set_wordlist_name, Options::set_delimiters): New method - declarations. - (Options::_language): New field. - (Options::_slot_name): Renamed from Options::_key_name. - * src/options.icc (Options::set): New method. - (Options::get_slot_name): Renamed from Options::get_key_name. - * src/options.cc (DEFAULT_FUNCTION_NAME): Renamed from DEFAULT_NAME. - (DEFAULT_SLOT_NAME): Renamed from DEFAULT_NAME. - (Options::Options): Initialize _language. Update. - (Options::~Options): Update. - (Options::set_language, Options::set_total_switches, - Options::set_function_name, Options::set_slot_name, - Options::set_class_name, Options::set_hash_name, - Options::set_wordlist_name, Options::set_delimiters): New methods. - (Options::parse_options): Call set_language. Update. - * src/input.cc (is_declaration, is_declaration_with_arg, - is_define_declaration): New functions. - (Input::read_input): Accept %DECL declarations. - * src/output.cc (Output::output_lookup_function_body): Update. - * doc/gperf.texi (Declarations): Add new subnodes. - (User-supplied Struct, Gperf Declarations, C Code Inclusion): New - nodes. - (Keywords, Output Format, Binary Strings, Options): Mention % - declarations as being equivalent to the command line options. - - * src/options.cc (Options::long_usage): Rename options -H, -N, -l, -G. - (long_options): Add --hash-function-name, --lookup-function-name, - --compare-lengths. - * doc/gperf.texi (Output Details): Rename options -H, -N, -l, -G. - * tests/test-6.exp: Update. - - * src/options.cc (DEFAULT_DELIMITERS): Remove newline. - * src/options.cc (Options::long_usage): Change default --delimiters. - * doc/gperf.texi (Input Details): Likewise. - * tests/test-6.exp: Update. - - * doc/gperf.texi: Move description of option -l from section - Algorithmic Details to section Output Details. - * src/options.cc (Options::long_usage): Likewise. - * tests/test-6.exp: Update. - -2002-11-12 Bruno Haible - - * src/options.h (Output::get_output_file_name): New method. - (Output::_output_file_name): New field. - * src/options.icc (Options::get_output_file_name): New method. - * src/options.cc (Options::long_usage): Document option --output-file. - (Options::Options): Initialize _output_file_name. - (long_options): Add --output-file. - (Options::parse_options): Handle it. - * src/main.cc (main): Open the output file if given by name. - * doc/gperf.texi (Output File): New section. - * tests/test-6.exp: Update. - -2002-11-10 Bruno Haible - - * src/input.cc (pretty_input_file_name): New function. - (read_input): Use it in all error and warning messages. - - * src/keyword.h (Keyword::_lineno): New field. - * src/input.h (Input::_struct_decl_lineno): New field. - * src/input.cc (Input::read_input): Set _struct_decl_lineno. Fill - each keyword's _lineno field. - * src/main.cc (main): Pass _struct_decl_lineno from Input to Output. - * src/output.h (Output::Output) Add struct_decl_lineno argument. - (Output::_struct_decl_lineno): New field. - * src/output.cc (Output::Output) Add struct_decl_lineno argument. - (output_keyword_entry): Emit #line directive before table entry. - (Output::output): Emit #line directive before _struct_decl. - - Fix memory leaks. - * src/keyword.h (empty_string): New declaration. - * src/keyword.cc (empty_string): New variable. - * src/input.h (Input::_input): Make public. - (Input::_input_end): New field. - * src/input.cc (read_input): When removing leading whitespace from - struct_decl, reallocate it. For rest, use empty_string instead of "". - Set _input_end. - (Input::~Input): Delete _struct_decl, _struct_tag, _return_type. - * src/search.cc (Search::prepare): When removing an element from - the keyword list, delete the list node. - (Search::~Search): Delete _occurrences, _asso_values. - * src/main.cc (main): Between Search::~Search and Input::~Input, - destroy the keyword list. - - Rewrite the input routines. - * src/input.h: Don't include read-line.h. - (Input): Don't inherit from class Read_Line. - (Input::read_keys, Input::strcspn, Input::set_output_types, - Input::get_array_type, Input::save_include_src, - Input::get_special_input): Remove declarations. - (Input::read_input): New declaration. - (Input::_struct_decl): Renamed from Input::_array_type. - (Input::_verbatim_declarations): Renamed from Input::_include_src. - (Input::_verbatim_code): Replaces Input::_additional_code. - * src/input.cc: Completely rewritten. - * src/output.h (Output::Output): Update the verbatim_* arguments. - (Output::_struct_decl): Renamed from Output::_array_type. - (Output::_verbatim_declarations): Renamed from Output::_include_src. - (Output::_verbatim_code): Replaces Output::_additional_code. - * src/output.cc (Output::Output): Update the verbatim_* arguments. - (Output::output): Output the verbatim_* code pieces with #line. - * src/main.cc (main): Call Input::read_input instead of - Input::read_keys. Update Output::Output arguments. - * src/read-line.h: Remove file. - * src/read-line.cc, src/read-line.icc: Remove files. - * src/Makefile.in (OBJECTS): Remove read-line.o. - (READ_LINE_H): Remove variable. - (INPUT_H): Update. - (read-line.o): Remove rule. - * doc/gperf.texi (Declarations): Correct the example. - (Keywords): Mention that lines starting with % are forbidden here. - * tests/c-parse.exp: Update. - * tests/cplusplus.exp: Update. - * tests/gpc.exp: Update. - * tests/java.exp: Update. - * tests/objc.exp: Update. - * tests/test-4.exp: Update. - - * src/options.h (Options::get_input_file_name): New declaration. - (Options::_input_file_name): New field. - * src/options.icc (Options::get_input_file_name): New method. - * src/options.cc (Options::Options): Initialize _input_file_name. - (Options::parse_options): Don't open input file, only store it in - _input_file_name. - * src/main.cc (main): Open input file here. - Print an error message upon write error on the output file. - - Upgrade to autoconf-2.52. - * configure.in: Use AC_CONFIG_SUBDIRS instead of AC_OUTPUT_SUBDIRS. - * Makefile.devel (configure, lib/configure, src/configure, - tests/configure, doc/configure): Use autoconf-2.52. - -2002-11-09 Bruno Haible - - * doc/gperf.texi: Talk about "bytes" instead of "characters". Talk - about "keywords", not "keys". Talk about "input file", not "keyfile". - (@menu): Fix a menu entry. - (Contributors): Don't mention cperf. - (Motivation): Fix an off-by-one error in the definition of "minimal". - Mention GNU Java. Recommend http URL instead of anonymous ftp. - (Search Structures): Mention GNU Java. - (Output Format): Drop reference to node 'Implementation'. - (Output Details): Talk about "slot-name" instead of "key name". - (Algorithmic Details): Talk about "selected byte positons", not - "key positions". Upper limit is now 255. Explain a third reason - why duplicates can occur. Describe negative effects of - --occurrence-sort. - (Implementation): Remove chapter. - -2002-11-07 Bruno Haible - - * src/bool-array.cc (Bool_Array::~Bool_Array): Free _storage_array. - * src/search.cc (Search::~Search): Free _union_set, _determined. - - * tests/Makefile.in (check-test): Don't redirect stderr. - -2002-11-05 Bruno Haible - - * src/keyword-list.h (mergesort_list): New declarations. - * src/keyword-list.cc (Keyword_Comparison): New type. - (merge, mergesort_list): New functions, moved here from search.cc. - * src/search.h (Search::merge, Search::merge_sort): Remove methods. - (Search::_occurrence_sort, Search::_hash_sort): Remove fields. - * src/search.cc (Search::merge, Search::merge_sort): Remove methods. - (greater_by_occurrence, less_by_hash_value): New functions. - (Search::reorder, Search::sort): Use mergesort_list. - -2002-11-04 Bruno Haible - - * src/options.h (Options::_asso_iterations): New field. - (Options::get_asso_iterations): New method declaration. - * src/options.icc (Options::get_asso_iterations): New method. - * src/options.cc (Options::short_usage): Mention j and m. - (Options::long_usage): Document option -m. - (Options::Options): Initialize _asso_iterations. - (Options::~Options): Print _asso_iterations too. - (long_options): Add --multiple-iterations. - (Options::parse_options): Handle option -m. - * src/keyword-list.h (copy_list, delete_list): New declarations. - * src/keyword-list.cc (copy_list, delete_list): New functions. - * src/search.h (Search::_initial_asso_value, Search::_jump): New fields. - * src/search.cc (Search::prepare_asso_values): Initialize - _initial_asso_value and _jump here. - (Search::init_asso_values): Use _initial_asso_value. - (Search::try_asso_value): Use _jump. - (Search::optimize): If option -m was given, iterate over different - values for _initial_asso_value and _jump. - * doc/gperf.texi (Algorithmic Details): Document option -m. - * tests/test-6.exp: Update. - -2002-11-03 Bruno Haible - - Bug fix: When option -j 0 was used without option -r, the output was - not random. - * src/search.h (Search::prepare_asso_values): New method declaration. - * src/search.cc (Search::prepare_asso_values): New method, extracted - from Search::init_asso_values. Call srand also when "-j 0" was given. - (Search::optimize): Call prepare_asso_values(). - - * src/hash-table.h (Hash_Table::_ignore_length, Hash_Table::equal): - Declare as const. - * src/hash-table.cc (Hash_Table::equal): Declare as const. - * src/input.h (Input::_factory): Declare as const. - * src/keyword-list.h (Keyword_List::first, KeywordExt_List::first): - Declare as const. - * src/keyword-list.icc (Keyword_List::first, KeywordExt_List::first): - Declare as const. - * src/output.h (Output::num_hash_values, Output::output_constants, - Output::output_hash_function, Output::output_keylength_table, - Output::output_keyword_table, Output::output_lookup_array, - Output::output_lookup_tables, Output::output_lookup_function_body, - Output::output_lookup_function, Output::_array_type, - Output::_additional_code, Output::_include_src, Output::_total_keys, - Output::_total_duplicates, Output::_max_key_len, Output::_min_key_len): - Declare as const. - * src/output.cc (Output::num_hash_values, Output::output_constants, - Output::output_hash_function, Output::output_keylength_table, - Output::output_keyword_table, Output::output_lookup_array, - Output::output_lookup_tables, Output::output_lookup_function_body, - Output::output_lookup_function): Declare as const. - * src/search.h (Search::merge, Search::merge_sort, - Search::compute_occurrence, Search::already_determined, - Search::keyword_list_length, Search::max_key_length, - Search::get_max_keysig_size, Search::compute_hash, - Search::sort_by_occurrence): Declare as const. - * src/search.cc (Search::merge, Search::merge_sort, - Search::compute_occurrence, Search::already_determined, - Search::keyword_list_length, Search::max_key_length, - Search::get_max_keysig_size, Search::compute_hash, - Search::sort_by_occurrence): Declare as const. - - * src/output.cc (Output::output): Set char_to_index to a cast in all - cases. Avoids gcc warnings on the generated code. - - * src/output.cc (Output_Enum): Prepend an underscore to field names. - (Output_Expr1): Likewise. - (Output::output_hash_function): Simplify the special case for "-k 1,$". - - * src/search.h (Search::init_asso_values, Search::find_asso_values): - New declarations. - (Search::try_asso_value): Renamed from Search::affects_prev. - (Search::change_some_asso_value): Renamed from Search::change. - (Search::set_asso_max, Search::get_asso_max): Remove methods. - (Search::_union_set): New field. - * src/search.cc (Search::init_asso_values): New method, extracted - from Search::optimize. - (Search::try_asso_value): Renamed from Search::affects_prev. Take the - iteration count as argument. - (Search::change_some_asso_value): Renamed from Search::change. Don't - make union_set static. Don't increment _fewest_collisions here. - (Search::find_asso_values): New method, extracted from - Search::optimize. - (Search::optimize); Update. - - * src/search.h (Search::compute_hash): Renamed from Search::hash. - (Search::compute_disjoint_union): Remove declaration. - (Search::sort_by_occurrence): Renamed from Search::sort_set. - * src/search.cc (Search::compute_hash): Renamed from Search::hash. - (compute_disjoint_union): Renamed from Search::compute_disjoint_union. - (Search::sort_by_occurrence): Renamed from Search::sort_set. - (Search::change): Simplify loop. - - * src/search.h (Search::clear_determined): New declaration. - * src/search.cc (Search::clear_determined): New method. - (Search::already_determined): Optimize. - (Search::reorder): Even when the next keyword after the current one - is completely determined, move all determined keywords after the - current one. - - Compute the occurrences after removal of duplicates, not before. - * src/keyword.h (KeywordExt::init_selchars): Remove occurrences - argument. - * src/keyword.cc (KeywordExt::init_selchars): Likewise. - * src/search.cc (Search::prepare): Reorder the code. Compute the - occurrences after removal of duplicates. - (Search::merge_sort): Optimize the loop. - (Search::compute_occurrence): Renamed from Search::get_occurrence. - * src/search.h (Search::compute_occurrence): Renamed from - Search::get_occurrence. - * tests/chill.exp: Regenerated. - - Bug fix: The hash table could fail to detect duplicates, between - keywords of different length, when option -n (option[NOLENGTH]) was - given. - * src/hash-table.h (Hash_Table::Hash_Table): Pass table size, not - vector and vector size as arguments. - (Hash_Table::_log_size): New field. - (Hash_Table::equal): New declaration. - * src/hash-table.cc (size_factor): New variable. - (Hash_Table::Hash_Table): Pass table size, not vector and vector size - as arguments. Allocate the vector here. - (Hash_Table::~Hash_Table): Deallocate the vector here. - (Hash_Table::equal): New function. - (Hash_Table::insert): Use it. Don't use item->_allchars_length for the - increment if _ignore_length is true. - * src/search.cc (TABLE_MULTIPLE): Remove variable. - (Search::prepare): Update. - -2002-11-02 Bruno Haible - - Provide documentation also in PDF format. - * doc/Makefile.in (pdfdir, TEXI2PDF): New variables. - (all): Depend on pdf. - (pdf, gperf.pdf): New rules. - (maintainer-clean): Remove the PDF file. - - * src/keyword-list.icc: New file, extracted from keyword-list.h. - * src/keyword-list.h: Include keyword-list.icc. Move inline methods - to there. - * src/keyword-list.cc: Include keyword-list.icc. - * src/Makefile.in (KEYWORD_LIST_H): Add keyword-list.icc. - - * lib/hashpjw.h (hashpjw): Change argument type to 'unsigned char *'. - * lib/hash.cc (hashpjw): Likewise. - * src/keyword.icc: New file. - * src/keyword.h: Include keyword.icc. - (KeywordExt::_selchars): Change type to 'unsigned char *'. - * src/keyword.cc: Include keyword.icc. - (Keyword::Keyword, KeywordExt::KeywordExt): Move to keyword.icc. - (sort_char_set): Change argument type to 'unsigned char *'. - (KeywordExt::init_selchars): Update. - * src/search.h (Search::compute_disjoint_union): Change argument types - to 'unsigned char *'. - (Search::sort_set): Likewise. - (Search::affects_prev): Change argument type to 'unsigned char'. - * src/search.cc (Search::prepare): Initialize _duplicate_link here. - (Search::get_occurrence, Search::set_determined, - Search::already_determined, Search::hash): Update. - (Search::compute_disjoint_union): Change argument types to - 'unsigned char *'. - (Search::sort_set): Likewise. - (Search::affects_prev): Change argument type to 'unsigned char'. - (Search::change): Update. - * src/Makefile.in (KEYWORD_H): Add keyword.icc. - - * src/options.cc (Options::parse_options): Fix error message. - - * src/read-line.h (Read_Line::Read_Line): Make FILE* argument - mandatory. Move body to read-line.icc. - * src/read-line.icc (Read_Line::Read_Line): New constructor. - * src/input.h (Input::Input): Add FILE* argument. - * src/input.cc (Input::Input): Likewise. - * src/main.cc (main): Pass stdin to Input constructor. - - * src/options.h (DEFAULTCHARS): Remove. - (Positions::MAX_KEY_POS): Set to 255. - (Positions::_positions): Increase array size. - (PositionIterator::EOS): Set to -1. - (PositionIterator::_index): Change type to 'unsigned int'. - * src/options.icc (Positions::Positions): Don't store - PositionIterator::EOS. - (PositionIterator::next): Produce PositionIterator::EOS here. - * src/options.cc (Options::long_usage): Use MAX_KEY_POS, not - MAX_KEY_POS-1. - (PositionStringParser): Rename field _size to _in_range. Rename - field _curr_value to _range_curr_value. Rename field _upper_bound - to _range_upper_bound. - (PositionStringParser::nextPosition): Comments. - (Options::Options): Update. - (Options::~Options): Update. - (long_options): Use NULL, not 0. - (Options::parse_options): Set BAD_VALUE to -2; -1 is now EOS. Bug fix: - Check against array overflow when more than MAX_KEY_POS positions are - given. Don't store PositionIterator::EOS. - Check against extra arguments before opening the input file. - * src/output.cc (Output::output_hash_function): Change test which - was for option[DEFAULTCHARS]. - * tests/test-6.exp: Update. - - * src/options.h (Options::get_delimiters): Renamed from - Options::get_delimiter. - * src/options.icc (Options::get_delimiters): Renamed from - Options::get_delimiter. - * src/input.cc (Input::read_keys): Update. - - Bug fix. - * src/options.cc (Options::print_options): Escape backquote inside - double-quoted strings. - - Bug fix. - * src/keyword.cc (KeywordExt::init_selchars): Avoid comparison with - uninitialized member variable. Found with 'valgrind'. - - * src/version.cc: Include version.h. - * src/Makefile.in (OBJECTS): Reorder. - (KEYWORD_H, KEYWORD_LIST_H, INPUT_H, SEARCH_H, OUTPUT_H): New - variables. - (HASH_TABLE_H): Update. - (options.o, read-line.o, keyword.o, keyword-list.o, input.o, search.o, - output.o, main.o): Update dependencies. - - * src/vectors.h: Remove file. - * src/vectors.cc: Remove file. - * src/search.h: Don't include vectors.h. - (Search): Don't inherit from Vectors. New fields _alpha_size, - _occurrences, _asso_values. - (Search::_determined, Search::get_occurrence, Search::set_determined, - Search::already_determined, Search::hash, Search::sort_set): Make - nonstatic. - * src/search.cc (Search::Search): Initialize _alpha_size, _occurrences, - _asso_values, _determined. - (Search::optimize, Search::~Search): Update. - * src/output.h: Don't include vectors.h. - (Output): Remove field _v. New fields _alpha_size, _occurrences, - _asso_values. - (Output::Output): Replace Vectors* argument with alpha_size, - occurrences, asso_values. - * src/output.cc (Output::Output): Replace Vectors* argument with - alpha_size, occurrences, asso_values. - (Output::output_hash_function): Update. - * src/main.cc (main): Don't set Vectors::ALPHA_SIZE. - Pass _alpha_size, _occurrences, _asso_values from Search to Output. - * src/keyword.h: Don't include vectors.h. - * src/Makefile.in (OBJECTS): Remove vectors.o. - (VECTORS_H): Remove variable. - (vectors.o): Remove rule. - - * src/search.h: New file, combines src/key-list.h, src/gen-perf.h. - * src/search,cc: New file, combines src/key-list.cc, src/gen-perf.cc. - * src/key-list.h: Remove file. - * src/key-list.cc: Remove file. - * src/gen-perf.h: Remove file. - * src/gen-perf.cc: Remove file. - * src/main.cc (KeywordExt_Factory): Moved here from gen-perf.cc. - (main): Inline some code from gen-perf.cc. - * src/keyword.h (KeywordExt::init_selchars): Take the occurrences - vector as argument. - * src/keyword.cc (KeywordExt::init_selchars): Take the occurrences - vector as argument. - * src/input.cc (Input::set_output_types): Initialize _array_type, - _return_type, _struct_tag. - (Input::read_keys): Initialize _additional_code. - * src/Makefile.in (OBJECTS): Add search.o. - Remove key-list.o, gen-perf.o. - (KEY_LIST_H, GEN_PERF_H): Remove variables. - (gen-perf.o, key-list.o): Remove rules. - (search.o): New rule. - - * *, */*: Update copyright notice to GPL version 2. - - * src/keyword-list.h (Keyword_List): New class. - (KeywordExt_List): Inherit from it. - * src/keyword-list.cc (Keyword_List::Keyword_List): New constructor. - (KeywordExt_List::KeywordExt_List): Update. - * src/input.h (Input::Input): Add Keyword_Factory argument. - (Input::_factory): New field. - (Input::_head): Change type to Keyword_List*. - (Input::parse_line): New declaration. - * src/input.cc (Input::Input): New constructor. - (Input::parse_line): Renamed from parse_line. Use the _factory. - (Input::read_keys): Update. - * src/key-list.cc (KeywordExt_Factory): New class. - (Key_List::read_keys): Pass a KeywordExt_Factory as Input constructor - argument. - - Avoid g++ -Wold-style-cast warnings. - * src/bool-array.icc: Use new-style casts. - * src/gen-perf.cc: Likewise. - * src/input.cc: Likewise. - * src/key-list.cc: Likewise. - * src/keyword.cc: Likewise. - * src/options.cc: Likewise. - * src/output.cc: Likewise. - * src/hash-table.cc: Likewise. Remove (char *) cast in memset argument. - - * src/keyword-list.h (KeywordExt_List): Don't inherit from KeywordExt. - (KeywordExt_List::KeywordExt_List): Take a KeywordExt* as argument. - (KeywordExt_List::_car): New field. - (KeywordExt_List::first): Use it. - * src/keyword-list.cc (KeywordExt_List::KeywordExt_List): Take a - KeywordExt* as argument. - * src/input.cc (parse_line): Create the KeywordExt separately. - - Start using bool. - * src/bool-array.h (Bool_Array::set_bit): Change return type to bool. - * src/bool-array.icc (Bool_Array::set_bit): Likewise. - * src/gen-perf.h (Gen_Perf::affects_prev): Likewise. - * src/gen-perf.cc (Gen_Perf::affects_prev): Likewise. - * src/hash-table.h (Hash_Table::_ignore_length): Change type to bool. - (Hash_Table::Hash_Table): Change 3rd argument type to bool. - * src/hash-table.cc (Hash_Table::Hash_Table): Likewise. - * src/input.h (Input::_additional_code): Change type to bool. - * src/input.cc (Input::read_keys): Update. - * src/key-list.h (Key_List::_occurrence_sort, Key_List::_hash_sort, - Key_List::_additional_code): Change type to bool. - (Key_List::_determined): Change element type to bool. - (Key_List::already_determined): Change return type to bool. - * src/key-list.cc (Key_List::_determined): Change element type to bool. - (Key_List::set_determined): Update. - (Key_List::already_determined): Change return type to bool. - (Key_List::reorder, Key_List::sort, Key_List::Key_List): Update. - * src/options.h (Positions::sort): Change return type to bool. - (Options::operator[]): Likewise. - * src/options.icc (Positions::sort): Change return type to bool. - (Options::operator[]): Likewise. - * src/output.h (Output::Output): Change 5th argument type to bool. - (Output::_additional_code): Change type to bool. - * src/output.cc (Output::Output): Change 5th argument type to bool. - -2002-10-16 Bruno Haible - - * src/*.h: Align all member names at column 24. - -2002-10-15 Bruno Haible - - * src/input.h: New file. - * src/input.cc: New file, extracted from key-list.cc. - * src/key-list.h (Key_List): Don't inherit from Read_Line. - (Key_List::get_special_input, - Key_List::save_include_src, Key_List::get_array_type, - Key_List::strcspn, Key_List::set_output_types): Remove methods. - * src/key-list.cc (Key_List::get_special_input, - Key_List::save_include_src, Key_List::get_array_type, - Key_List::strcspn, Key_List::set_output_types, parse_line): Move to - src/input.cc. - (Key_List::read_keys): Use Input::read_keys. - (Key_List::Key_List): Update. - * src/gen-perf.cc: Update. - * src/Makefile.in (OBJECTS): Add input.o. - (input.o): New rule. - -2002-10-14 Bruno Haible - - * src/options.cc: Don't include "vector.h". - (Options::parse_options): Don't initialize Vectors::ALPHA_SIZE here. - * src/vectors.cc (Vectors::ALPHA_SIZE): Don't initialize here. - * src/gen-perf.cc (Gen_Perf::Gen_Perf): Initialize Vectors::ALPHA_SIZE. - - * src/options.h (Positions): New class. - (PositionIterator): New class. - (Options::parse_options): Renamed from Options::operator(). - (Options::get_asso_max, Options::set_asso_max): Move to class Key_List. - (Options::reset, Options::get): Remove, replaced by class - PositionIterator. - (Options::get_initial_asso_value): Renamed from Options::initial_value. - (Options::key_sort): Remove, replaced by Positions::sort. - (Options): Make all fields and methods non-static. - * src/options.icc (Positions::Positions, Positions::operator[], - Positions::get_size, Positions::pointer, Positions::set_size, - Positions::sort, PositionIterator::PositionIterator, - PositionIterator::next): New methods. - (Options::get_initial_asso_value): Renamed from Options::initial_value. - (Options::get_size_multiple): New method. - (Options::get_key_positions): New method. - (Options::get_max_keysig_size): Implement using _key_positions. - * src/options.cc (Options::long_usage): Split big string into small - pieces. - (PositionStringParser): Prefix field names with _. - (Options::Options): Update. - (Options::~Options): Fix explanation of of _size_multiple. Don't print - _key_positions if it is effectively ignored. - (Options::parse_options): Renamed from Options::operator(). Update. - * src/key-list.h (Key_List): New field _size. New methods get_asso_max, - set_asso_max, get_max_keysig_size. - * src/key-list.cc (Key_List::read_keys): Don't make side effects on - options. - (Key_List::dump): Use Key_List::get_max_keysig_size() instead of - Options::get_max_keysig_size(). - (Key_List::get_max_keysig_size): New function. - * src/hash-table.cc (Hash_Table::~Hash_Table): Compute the field - width on the fly if option[ALLCHARS]. - * src/gen-perf.cc (Gen_Perf::Gen_Perf): Update, - Use Options::get_size_multiple() instead of Options::get_asso_max(). - Use Key_List::get_asso_max() instead of Options::get_asso_max(). Use - Key_List::get_max_keysig_size() instead of - Options::get_max_keysig_size(). - (Gen_Perf::affects_prev): Likewise. - (Gen_Perf::change): Likewise. - * src/keyword.cc: Update. - * src/main.cc: Update. - * src/output.cc: Update. - * tests/test-6.exp: Update. - -2002-10-13 Bruno Haible - - * src/bool-array.*: Some polishing. - - * src/options.h (Options::operator=, Options::operator!=): Remove - unused methods. - * src/options.icc (Options::operator=, Options::operator!=): Remove. - - * src/*.h: Prefix all field names with _. - * src/*.cc, src/*.icc: Update. - - * src/*: Simplify declarations of functions without arguments. - -2002-10-04 Bruno Haible - - * src/output.h: New file, extracted from key-list.h. - * src/output.cc: New file, extracted from key-list.cc. - * src/key-list.h (Key_List): Make some fields protected. Move output - routines to src/output.h. - * src/key-list.cc: Move output routines to src/output.cc. - * src/gen-perf.cc (Gen_Perf::doit_all): Use class Output. - * src/Makefile.in (OBJECTS): Add output.o. - (output.o): New rule. - -2002-10-03 Bruno Haible - - * src/iterator.h: Remove file. - * src/iterator.cc: Remove file. - * src/options.cc: (PositionStringParser): New class, taken from old - iterator.cc. - * src/Makefile.in (OBJECTS): Remove iterator.o. - (ITERATOR_H): Remove variable. - (iterator.o): Remove rule. - - * src/keyword-list.h: New file. - * src/keyword-list.cc: New file. - * src/list-node.h: Remove file. - * src/list-node.cc: Remove file. - * src/keyword.h (KeywordExt::init_selchars): New declaration. - * src/keyword.cc (sort_char_set, KeywordExt::init_selchars): New, from - old list-node.cc. - * src/gen-perf.cc: Replace List_Node by KeywordExt or KeywordExt_List, - as appropriate. - * src/hash-table.h: Likewise. - * src/key-list.h: Likewise. - * src/key-list.cc: Likewise. - * src/Makefile.in (OBJECTS): Remove list-node.o, add keyword-list.o. - (LIST_NODE_H): Remove macro. - (list-node.o): Remove rule. - (keyword-list.o): New rule. - - * src/keyword.h (KeywordExt): New class. - * src/keyword.cc (KeywordExt): New constructor. - * src/list-node.h (List_Node): Inherit from KeywordExt. - * src/list-node.cc: Update. - * src/gen-perf.cc: Update. - * src/hash-table.cc: Update. - * src/key-list.cc: Update. - (output_keyword_entry): Change argument type to KeywordExt*. - - * src/keyword.h: New file. - * src/keyword.cc: New file. - * src/list-node.h (List_Node): Extend Keyword. - * src/list-node.cc: Update. - * src/gen-perf.cc: Update. - * src/hash-table.cc: Update. - * src/key-list.cc: Update. - * src/Makefile.in (OBJECTS): Add keyword.o. - (keyword.o): New rule. - - * src/key-list.cc (Key_List::read_keys): Allocate the memory for the - hash table using 'new'. - (Key_List::output_lookup_array): Allocate the memory for the duplicates - array using 'new'. - * src/options.h (LARGE_STACK_ARRAYS): Remove definition. - * src/main.cc (main): Remove setrlimit call. - * src/configure.in: Don't test for unistd.h, sys/time.h, - sys/resource.h, getrlimit, setrlimit. - - * src/bool-array.h (Bool_Array): Make all members non-static. - Add an argument to the constructor. Remove init(), rename reset() to - clear(), rename find() to set_bit(). - * src/bool-array.icc: Move init() code into the constructor. - Rename reset() to clear(), rename find() to set_bit(). - * src/gen-perf.h (Gen_Perf): Add collision_detector member. - * src/gen-perf.cc: Update. - - * src/gen-perf.h (Gen_Perf::doit_all): Renamed from - Gen_Perf::operator (). - * src/gen-perf.cc (Gen_Perf::doit_all): Renamed from - Gen_Perf::operator (). - * src/main.cc: Update. - - * src/read-line.h (Read_Line::read_next_line): Renamed from - Read_Line::get_line. - * src/read-line.icc: Likewise. - * src/read-line.cc: Update. - * src/key-list.cc: Update. - - * lib/getline.h: New file. - * lib/getline.cc: New file. - * lib/Makefile.in (OBJECTS): Add getline.o. - (getline.o): New rule. - * src/read-line.h (Read_Line::readln_aux): Remove declaration. - * src/read-line.cc (Read_Line::readln_aux): Remove function. - * src/read-line.icc (Read_Line::get_line): Use ::get_line. - * src/options.h (LARGE_STACK): Remove macro. - - * src/bool-array.h (STORAGE_TYPE): Remove type. - Use 'unsigned int' instead of STORAGE_TYPE. - * src/bool-array.cc: Likewise. - * src/bool-array.icc: Likewise. - * src/gen-perf.cc: Likewise. - - * src/new.cc: Remove file. - * src/Makefile.in (OBJECTS): Remove new.o. - (new.o): Remove rule. - * src/configure.in: Remove test for HAVE_THROW_DECL. - * acconfig.h: Remove file. - - * src/trace.h: Remove file. - * src/trace.cc: Remove file. - * src/Makefile.in (OBJECTS): Remove trace.o. - (TRACE_H): Remove variable. - (trace.o): Remove rule. - Update all dependencies. - * src/bool-array.h, src/bool-array.cc, src/bool-array.icc: Don't use T. - * src/gen-perf.cc: Likewise. - * src/hash-table.cc: Likewise. - * src/iterator.cc: Likewise. - * src/key-list.cc: Likewise. - * src/list-node.cc: Likewise. - * src/main.cc: Likewise. - * src/new.cc: Likewise. - * src/options.h, src/options.cc, src/options.icc: Likewise. - * src/read-line.h, src/read-line.cc, src/read-line.icc: Likewise. - - * tests/Makefile.in: Use gperf option -I, to avoid gcc-3.x warnings. - * tests/test.c: Don't use gets(), to avoid warnings. - -2001-08-02 Bruno Haible - - * doc/gperf.texi: Change bug report address to . - * README: Updated. - -2000-12-18 Bruno Haible - - * src/configure.in: Add check for rand() in libm. Needed for BeOS. - * src/Makefile.in (LIBS): Use @GPERF_LIBM@ instead of hardwiring -lm. - -2000-11-20 Bruno Haible - - * doc/help2man: Update to version 1.23. - -2000-09-26 Bruno Haible - - * gperf-2.7.2 released. - - * doc/gperf.texi: Add a second bug report address - . - * README: Updated. - -2000-08-28 Bruno Haible - - * lib/getopt.h (struct option): Use "const" also when compiling in - C++ mode. Avoids warnings from Sun CC and HP-UX aCC. - - * doc/Makefile.in (docdir): Change from $(datadir)/doc/@PACKAGE@ to - $(prefix)/doc/@PACKAGE@, following the newest GNU standards. - -2000-08-20 Bruno Haible - - * src/version.cc: Bump version number to 2.7.2. - * doc/gperf.texi: Likewise. - - * doc/texinfo.tex: Update to post-texinfo-4.0 version. @code in the - title page now chooses a larger font. The overall layout of the - text is denser. - - * AUTHORS: New file. - - * tests/Makefile.in (all): Add check-lang-utf8 and check-lang-ucs2. - (check-lang-utf8, check-lang-ucs2): New targets. - (clean): Remove lu8out and lu2out. - * tests/lang-utf8.gperf, tests/lang-utf8.exp: New files. - * tests/lang-ucs2.gperf, tests/test2.c, tests/lang-ucs2.in, - tests/lang-ucs2.exp: New files. - - Allow the use of embedded NULs in keys. - * lib/hash.h (hashpjw): Add a length argument. - * lib/hash.cc (hashpjw): Likewise. Don't stop when encountering a NUL - character. - * src/hash-table.h (Hash_Table constructor): Add ignore_len argument. - (Hash_Table::ignore_length): New field. - (Hash_Table::insert): Renamed from Hash_Table::operator(). Remove - ignore_length argument. - * src/hash-table.cc (NIL): Remove macro. - (Hash_Table constructor): Add ignore_len argument. Use it to - initialize ignore_length. - (Hash_Table destructor): Specify explicit length of char_set and - key. - (Hash_Table::insert): Renamed from Hash_Table::operator(). Remove - ignore_length argument. Pass explicit length to hashpjw. Compare - char_set using memcmp, not strcmp. - * src/list-node.h (List_Node): Rename field length to key_length. - New field char_set_length. - (List_Node constructor): Accept key and rest, not the entire line. - * src/list-node.cc (List_Node constructor): Accept key and rest, not - the entire line. Don't NUL terminate key and char_set. Specify - explicit length of key. Initialize char_set_length field. - * src/key-list.cc: Include . - (parse_line): New function. - (Key_List::read_keys): Call parse_line instead of new List_Node. - Pass option[NOLENGTH] to Hash_Table constructor, not - Hash_Table::insert. Specify explicit length of key and char_set. - (Key_List::get_occurrence): Use explicit length of char_set. - (Key_List::set_determined): Likewise. - (Key_List::already_determined): Likewise. - (output_string): Add length argument. Output unprintable characters - using octal escape sequence. - (output_keyword_entry): Use explicit length of key. - (Key_List::output_lookup_array): Specify explicit length of key. - (output_switch_case): Likewise. - (Key_List::dump): Likewise. - * src/gen-perf.h (Gen_Perf::compute_disjoint_union): Add two length - arguments. - * src/gen-perf.cc (Gen_Perf::compute_disjoint_union): Likewise. Don't - stop when encountering NUL characters. Don't NUL terminate the - result. - (Gen_Perf::hash): Use explicit length of char_set. - (Gen_Perf::change): Specify explicit length of key. - * doc/gperf.texi: Document it. - - * doc/help2man: New file, help2man version 1.022. - * Makefile.devel (all): Add doc/gperf.1. - (doc/gperf.1): New target. - * doc/gperf.1: Automatically generated. - - * mkinstalldirs: New file, from automake-1.4, grep-2.4.1, guile-1.4, - libtool-1.3.3, make-3.79.1, tar-1.13. - * src/Makefile.in (MKINSTALLDIRS): New variable. - (install, installdirs): Use it instead of mkdir. - * doc/Makefile.in (MKINSTALLDIRS): New variable. - (install, installdirs): Use it instead of mkdir. - - * INSTALL: Update. - -2000-08-19 Bruno Haible - - * src/key-list.cc (Output_Compare_Memcmp): New class. - (Key_List::output_lookup_function): When option -l is given, use - memcmp instead of strcmp or strncmp. - - * doc/gperf.texi: The bug report address is . - The download address is ftp.gnu.org. Remove mention of -a and -g - options (now nops). Explain effect of -c option. - - * doc/configure.in (PACKAGE): New variable. - * doc/Makefile.in (datadir, docdir): New variables. - (dvidir, htmldir): Change values. - (install, installdirs): Update. - - * src/configure.in: Rename cache variable gp_cxx_throw_decl to - gp_cv_cxx_throw_decl. - - * src/key-list.cc (Key_List::output_hash_function): When outputting - __inline, take advantage of C++ compilers which have inline. - - * src/key-list.cc (Output_Compare_Strncmp::output_comparison): - After the call to strncmp, verify that expr2 is not longer than - `len'. - Reported by Carlo Wood . - - * src/key-list.cc (Key_List::output_lookup_function_body): Avoid - emitting the loop for dealing with duplicates if - total_duplicates == 0. - - * src/key-list.cc (Key_List::read_keys): Don't accept an empty key. - - * src/Makefile.in (install, installdirs, uninstall): Respect - $(DESTDIR). - * doc/Makefile.in (install, installdirs, uninstall): Likewise. - - * src/options.cc (Options::print_options): Escape the arguments which - contain special characters. - - * tests/c-parse.gperf: Updated from gcc-2.95.2/gcc/c-parse.gperf. - * tests/objc.gperf: New file, from gcc-2.95.2/gcc/objc/objc.gperf. - * tests/chill.gperf: New file, from gcc-2.95.2/gcc/ch/gperf. - * tests/cplusplus.gperf: New file, from gcc-2.95.2/gcc/cp/gxx.gperf. - * tests/gplus.gperf: Remove file. - * tests/java.gperf: New file, from gcc-2.95.2/gcc/java/keyword.gperf. - * tests/Makefile: Check them all. - * tests/c-parse.exp: Renamed from tests/test-1.exp. - * tests/modula2.exp: Renamed from tests/test-2.exp. - * tests/cplusplus.exp: Renamed from tests/test-3.exp. - * tests/gpc.exp: Renamed from tests/test-5.exp. - - * src/key-list.cc (output_switch_case): Add trailing semicolon to - lengthptr assignment line. Fixes bug with -D and -S. - From Reini Urban . Also reported by - David Hunter. - * tests/Makefile.in (check-lang-syntax): Perform each test with -D - once without and once with duplicates. - - * src/key-list.cc (output_keyword_entry): Avoid outputting a struct - initializer of the form {"key",}. - - * src/iterator.cc: Don't include . - From Michael Deutschmann . - - * tests/Makefile.in (VALIDATE, check-lang-syntax): Use $(srcdir) where - appropriate. - Reported by Andreas Schwab . - - * tests/validate: Don't run -traditional tests by default. - - * src/main.cc (main): Check for write error on stdout before returning. - - * src/Makefile.in (LDFLAGS): New definition, to catch the value given - at configure time. - - Make the structure initializers customizable. Based on a patch by - Kaveh R. Ghazi . - * src/options.h (Options::get_initializer_suffix, - Options::initializer_suffix): New declarations. - * src/options.icc (Options::get_initializer_suffix): New function. - * src/options.cc (DEFAULT_INITIALIZER_SUFFIX): New constant. - (Options::initializer_suffix): New variable. - (Options::short_usage): Document option "-F". - (Options::long_usage): Document option "-F". - (Options constructor): Initialize initializer_suffix. - (Options destructor): Dump initializer_suffix. - (long_options): Add option "-F". - (Options::operator()): Accept option "-F". Sets initializer_suffix. - * src/key-list.cc (output_keyword_blank_entries): Output - initializer_suffix. - * doc/gperf.texi: Document option "-F". - - * COPYING: Replace with GPL version 2 (with new FSF address and Y2K - safe year format). - - * doc/gpl.texinfo: New file. - * doc/gperf.texi: Document it. - * doc/Makefile.in (gperf.info, gperf.dvi, gperf.html, gperf_toc.html): - Update dependencies. - - * doc/Makefile.in (MAKEINFO): Unset LANG while running makeinfo. - -1998-05-20 Bruno Haible - - * doc/Makefile.in (gperf.dvi, clean): Remove gperf.cps. - (install, installdirs, uninstall): Don't install gperf.dvi. The - info and HTML documentations are sufficient for on-line use, and - users who wish to print the documentation (in PS or DVI format) - can do this directly off the source distribution. - (DVIPS): Use "-D600" instead of "-Pljfour", for portability. - -1998-05-20 Akim Demaille - - * doc/gperf.texi: Many modifications: - (Output Format): Declare `hash' and `in_word_set' as functions. - (Concept Index): New section. - (Title page): Use standard presentation. - (Top): Use @top instead of @unnumbered so that automatic master - update works. - (Motivation): Avoid spaces in @var. - (Options): Use the standard name ``Invoking ...''. - (Options): Declare also the long form of the options. - (Options): Remove redundant @itemize when @table is used. - -1998-05-08 Andreas Schwab - - * aclocal.m4 (CL_PROG_INSTALL): Set cl_cv_path_install, not - ac_cv_path_install. - -Sat May 2 13:20:54 1998 Bruno Haible - - * gperf-2.7 released. - -Sat May 2 12:31:51 1998 Bruno Haible - - * src/version.cc (version_string): Remove the "(C++ version)" suffix. - It's redundant: the early C versions of gperf are called cperf. - Reported by Karl Berry. - * src/option.cc (Options::operator()): Trim the output of "gperf -v". - -Thu Apr 16 13:22:16 1998 Bruno Haible - - * lib/Makefile.in, src/Makefile.in: Don't use $(TARGET_ARCH). - Solaris "make" sets it to a value not understood by "cc". - -Wed Apr 15 23:52:14 1998 Bruno Haible - - * lib/Makefile.in, src/Makefile.in: Don't use implicit rules. Don't - use $<. AIX "make" and OSF/1 "make" have problems with both. - * src/gen-perf.cc, src/key-list.cc: Cast free() argument to char*, - otherwise it doesn't compile on SunOS 4. - * src/key-list.h: Declare structs outside of other declarations, - needed for OSF/1 cxx 5.5. - * lib/getopt.h: Use prototypes if __STDC__ || __cplusplus. - Don't give a prototype for getopt(), to avoid error on SunOS 4. - * lib/getopt.c: Declare strncmp, to avoid warnings. - -Tue Apr 14 23:24:07 1998 Bruno Haible - - * lib/GetOpt.{h,cc}: Remove files. - * lib/getopt.{h,c}, lib/getopt1.c: New files, from GNU libc. - * lib/configure.in (AC_INIT): Search for hash.cc, not GetOpt.cc. - * lib/Makefile.in (OBJECTS): Remove GetOpt.o, add getopt.o, getopt1.o. - (getopt.o, getopt1.o, hash.o): Use explicit building rules. Some - "make"s don't support to have both implicit rules for "%.o : %.c" - and "%.o : %.cc" in the same Makefile. - * lib/hash.{h,cc}: Remove #pragma; there are no templates here. - * src/option.h (Options::usage): Remove. - (Options::short_usage, Options::long_usage): Declare. - * src/option.cc (Options::usage): Remove. - (Options::short_usage, Options::long_usage): New functions. - (long_options): New array. - (Options::operator()): Use getopt_long instead of GetOpt::operator(), - change all references to GetOpt members. - - * src/std-err.{h,cc}: Remove files. - * src/gen-perf.cc, src/key-list.cc, list-node.cc, new.cc, options.cc: - Call fprintf(stderr) instead of Std_Err::report_error(). - * src/key-list.h, src/list-node.h, src/options.h: Don't use class - Std_Err any more. - * src/option.cc (program_name): New variable. - * src/Makefile.in: Remove STD_ERR_H. - (OBJECTS): Remove std-err.o. - -Mon Mar 23 01:03:35 1998 Bruno Haible - - * aclocal.m4, {lib,src,tests}/configure.in: Remove CL_CC_WORKS and - CL_CXX_WORKS, already contained in autoconf 2.12. - - * src/gen-perf.cc, src/key-list.cc: Move some code from - Gen_Perf::Gen_Perf() to Key_List::output(). - * src/Makefile.in: Update dependencies. - - * src/options.{h,cc}: Remove option "-p". - * src/key-list.cc (Key_List::set_output_types): Rewrite. - (default_array_type, default_return_type): Remove. - * src/key-list.cc: Adjust "const" handling. - + With option "-t" [TYPE], don't emit wrong code if there is no - space before the struct's opening brace. - -Sun Mar 22 16:59:15 1998 Bruno Haible - - * src/key-list.{h,cc}: Completely reorganized the output routines. - Rewrote from scratch the output_switch() function. Use classes - (Output_Constants, Output_Expr, Output_Compare) for abstraction. - In particular: - + Don't emit trailing whitespace and spurious blank lines. - + Adjust indentation of the arrays. - + Don't emit commas at the end of array initializers and - struct initializers. - + With option "-l" [LENTABLE], compare the length before - fetching the word from memory. - + With option "-S" [SWITCH], emit the comparison code just once, - not once in every switch statement. - + With option "-S" [SWITCH], choose the right switch statement - through a binary search, not a linear search. - + With option "-S" [SWITCH], emit straightforward comparisons - instead of switch statements with just one "case" label. - + With options "-S -p -t" [SWITCH, POINTER, TYPE], don't emit - spurious empty elements at the beginning of the wordlist array. - + With option "-D" [DUP] and not option "-S" [SWITCH], if there - is no more room for duplicate entries in the lookup array, - don't call `assert (i != 0)'. Instead, make the array larger :-) - + With option "-D" [DUP], if there are no duplicates, don't - automatically fall back to the non-"-D" algorithm. If the user - wants the non-"-D" algorithm, he can just not specify "-D". - + With option "-D" [DUP] and either options "-p -t" [POINTER, TYPE] - or not option "-S" [SWITCH], don't emit spurious empty elements - at the beginning of the wordlist array. - + With option "-D" [DUP], simplify the detection and processing - of duplicate entries in the lookup array. - + With options "-D -l" [DUP, LENTABLE] and not option "-S" [SWITCH], - don't forget to emit the lengthtable array. - + With options "-D -l -S" [DUP, LENTABLE, SWITCH], don't forget to - compare the lengths before comparing the strings. - - * src/gen-perf.cc: No need to include . - * src/options.cc: Likewise. - - * src/options.cc: Don't use `errno' after freopen failed. - * src/std-err.cc: `report_error' doesn't call strerror(errno) any - more. No need to include and . - - * tests/Makefile.in (check-*): Any difference between .exp and .out - is a failure. Don't ignore whitespace differences. - - * tests/Makefile.in (check-lang-syntax): Add some more checks. - -Fri Mar 20 00:54:54 1998 Bruno Haible - - * tests/jscript.gperf: Renamed from tests/javascript.gperf, because - of Minix and SVR2 14-character filename limit. - * src/key-list.cc (output_string): New function. - (Key_List::output_switch, Key_List::output_keyword_table): Call it. - - * src/options.{h,icc,cc} (get_wordlist_name): New function. Add - option -W. - * src/key-list.cc (Key_List::output_switch, - Key_List::output_keyword_table, Key_List::output_lookup_function): - Use it. - Patch from William Bader . - - * src/version.cc: Bump version number directly from 2.5 to 2.7, - because Schmidt's last release from 1991 carries version number 2.6. - -Tue Jul 30 00:02:39 1991 Douglas C. Schmidt (schmidt at net4.ics.uci.edu) - - * Fixed a small bug in the Key_List::output_keyword_table routine - that caused an extra newline to be printed if there where no - leading blank entries... (who cares, right?!) - -Mon Jul 29 22:05:40 1991 Douglas C. Schmidt (schmidt at net4.ics.uci.edu) - - * Modified the handling of the -E (emit enums rather than - #defines) option in conjunction with the -G option. Now, if -G - and -E are given the enums are generated outside the lookup - function, rather than within it! - -Mon Apr 8 18:17:04 1991 Doug Schmidt (schmidt at net4.ics.uci.edu) - - * Yucko, there was a bug in the handling of -c (and of course the - new -I command in key-list.cc). Apparently when I added the - super-duper hack that provided support for duplicate keys I - forgot to update the strcmp output... - -Mon Mar 9 02:19:04 1998 Bruno Haible - - * Moved the documentation to doc/, put the stuff borrowed from - libg++ into lib/. - * Rewrote all Makefile.in's for better compliance with GNU standards. - * Autoconf based configuration. Rewrote all configure.in's. Added - aclocal.m4, with macros from CLISP and CLN. Added Makefile.devel. - * src/depend: Removed. Dependencies are now in src/Makefile.in. - - * src/bool-array.icc: New file, contains inline functions, from both - src/bool-array.h and src/bool-array.cc. - * src/options.icc: New file, contains inline functions, from both - src/options.h and src/options.cc. - * src/read-line.icc: New file, contains inline functions, from both - src/read-line.h and src/read-line.cc. - - * src/bool-array.h: Don't include . - * src/bool-array.cc: Include . - * src/gen-perf.cc: No need to include . Don't include - <_G_config.h>. - * src/hash-table.cc: Don't include and . Include - and lib/hash.h instead. - * src/iterator.cc: Don't include . - * src/key-list.cc: Don't include . Include and - instead. - * src/list-node.cc: Don't include . Include instead. - Remove `index' hack. - * src/main.cc: Don't include <_G_config.h>. - * src/new.cc: Don't include . Include instead. - * src/options.cc: Don't include . Include and - instead. - * src/read-line.cc: Don't include . Include - instead. - * src/std-err.cc: Don't include . Include (for Irix). - * src/vectors.h: No need to include . - * src/version.cc: No need to include . - - * src/bool-array.h: Change `STORAGE_TYPE' from int to unsigned int. - * src/bool-array.{h,cc}: Change type of `Bool_Array::size' from int - to unsigned int. - * src/bool-array.{h,cc}: Change type of `Bool_Array::init' argument - from STORAGE_TYPE to unsigned int. - * src/gen-perf.{h,cc}: Change two `Gen_Perf::compute_disjoint_union' - argument types from `char *' to `const char *'. - * src/iterator.h: Change type of `Iterator::str' and argument of - `Iterator::Iterator' from `char *' to `const char *'. - * src/iterator.cc: Cast to `unsigned char' before calling `isdigit'. - * src/key-list.{h,cc}: Change type of `Key_List::array_type', - `Key_List::return_type', `Key_List::struct_tag', - `Key_List::include_src', `default_array_type', `default_return_type' - and return type of `Key_List::get_array_type', - `Key_List::get_special_input', `Key_List::save_include_src' from - `char *' to `const char *'. - * src/key-list.cc: Change "pretty gross" assignment. - * src/key-list.cc: Don't use `alloca', HP-UX CC lacks it. - * lib/GetOpt.cc: Likewise. - * src/key-list.cc (merge): Use iteration instead of recursion. - * src/list-node.{h,cc}: Change type of `List_Node::key', - `List_Node::rest', `List_Node::char_set' from `char *' to - `const char *'. - * src/new.cc: Don't use BUFSIZ. Conditionalize the throw() declaration. - * src/read-line.h: Don't use BUFSIZ. - * src/read-line.cc: Make CHUNK_SIZE a constant, and use allocate the - buffers on the stack by default. Use memcpy for copying buffers. - Include . - * src/read-line.icc (get_line): Use iteration instead of tail recursion. - Don't call ungetc(EOF,stdin). - * src/std-err.{h,cc}: Change type of `Std_Err::program_name' and of - argument `Std_Err::report_error' from `char *' to `const char *'. - * src/std-err.cc: `report_error' doesn't call `exit' any more. All - callers changed to do that themselves. - * src/trace.h: Make constructor/destructor calls non-inline. - - * src/key-list.cc (output_hash_function): If option[CPLUSPLUS], - always make the hash function inline. - (output): Declare the hash function inline, with the right name. - * src/options.{h,cc}, src/gen-perf.cc, src/key-list.cc: Remove - options -g, making it on by default. Remove option -a. Instead, - introduce "-L KR-C", "-L C", "-L ANSI-C", "-L C++". - * src/options.{h,cc}, src/key-list.cc: Add option -I. - * src/key-list.cc: Don't emit "const" if compiling in mode "-L KR-C". - * src/key-list.cc: Don't emit a comma at the end of an enum list. - * src/main.cc: Remove COUNT_TIME code. - * src/vectors.h, src/key-list.cc, src/options.cc, src/list-node.cc: - ALPHA_SIZE defaults to 256 now. Add option -7. - - * tests/javascript.gperf: New file. - * tests/jstest*.gperf, tests/validate: New tests. - -Sat Jan 31 01:38:11 1998 Alexandre Oliva - - * src/Makefile.in ($(TARGETPROG)): Add $(CFLAGS). - -Wed Jan 28 01:56:00 1998 Manfred Hollstein - - * configure.in (package_makefile_rules_frag): New and - redirect stderr from ${srcdir}/config.shared to - ${package_makefile_rules_frag}. - * src/configure.in: Ditto. - * tests/configure.in: Ditto. - -Fri Jan 23 08:00:41 1998 H.J. Lu (hjl@gnu.org) - - * gperf.texi (@ichapter): Changed to @chapter. - -Wed Jan 14 09:16:48 1998 H.J. Lu (hjl@gnu.org) - - * src/key-list.cc, src/key-list.h (Key_List::strcspn): Don't - define if strcspn is defined. - -Fri Jan 24 13:23:47 1997 Mike Stump - - * src/new.cc (operator delete): Add the exception specification. - -Mon Feb 5 19:29:16 1996 Per Bothner - - * src/read-line.cc (Read_Line::readln_aux): Handle EOF if last line - has a length which is an exact multiple of CHUNK_SIZE. (Used to throw - away the line's contents.) From Bruno Haible . - * src/Makefile.in ($(TARGETPROG)): Add -lm to link line. - -Tue Jun 11 13:43:50 1996 Brendan Kehoe - - * src/list-node.cc (List_Node): Reorder init of nodes to - match declaration order. - * src/hash-table.cc (Hash_Table): Likewise. - -Tue Oct 10 16:37:28 1995 Mike Stump - - * src/new.cc: Since malloc/delete are not paired, we cannot call - free. - -Wed Jan 4 12:40:14 1995 Per Bothner - - * src/Makefile.in ($(TARGETPROG)): Link with $(LDFLAGS). - Patch from John Interrante . - -Sat Nov 5 19:12:48 1994 Jason Merrill (jason@phydeaux.cygnus.com) - - * src/Makefile.in (LIBS): Remove. - -Tue Oct 18 17:51:14 1994 Per Bothner - - * src/std-err.cc: Use stderror, instead of the non-standard - sys_nerr and sys_errlist. - -Sat Sep 17 22:02:13 1994 Per Bothner (bothner@kalessin.cygnus.com) - - * src/key-list.cc (output_hash_function): - Patch from William Bader . - -Fri Jul 15 09:38:11 1994 Per Bothner (bothner@cygnus.com) - - * src/std-err.cc: #include , and only declare - extern int errno if errno is not a macro. - -Mon May 30 17:29:34 1994 Per Bothner (bothner@kalessin.cygnus.com) - - * Makefile.in (src_all, install): Make sure to add '/' after - `pwd` in $rootme, as expected by FLAGS_TO_PASS. - -Wed May 11 00:47:22 1994 Jason Merrill (jason@deneb.cygnus.com) - - Make libg++ build with gcc -ansi -pedantic-errors - * src/options.h: Lose commas at end of enumerator lists. - -Sun Dec 5 19:16:40 1993 Brendan Kehoe (brendan@lisa.cygnus.com) - - * src/hash-table.cc (Hash_Table::~Hash_Table): Don't pass an - argument to fprintf, since it's not expecting one. - -Fri Nov 26 19:03:18 1993 Per Bothner (bothner@kalessin.cygnus.com) - - * src/list-node.cc: #undef index, for the sake of broken NeXT, - -Thu Nov 4 11:16:03 1993 Per Bothner (bothner@kalessin.cygnus.com) - - * Makefile.in (install): Use INSTALL_DATA for gperf.1. - -Mon Oct 25 18:40:51 1993 Per Bothner (bothner@kalessin.cygnus.com) - - * src/key-list.cc (Key_List::read_keys): Use POW macro - to increase hash table size to power of 2. - - * options.h (LARGE_STACK_ARRAYS): New flag. Defaults to zero. - * gen-perf.cc, key-list.cc, read-line.cc: - Only stack-allocate large arrays if LARGE_STACK_ARRAYS is set. - * main.cc (main): Only call setrlimit (RLIMIT_STACK, ...) - if LARGE_STACK_ARRAYS. - -Mon Oct 4 17:45:08 1993 Per Bothner (bothner@kalessin.cygnus.com) - - * src/gen-perf.cc: Always use ANSI rand/srand instead of BSDisms. - -Wed Aug 18 12:19:53 1993 Per Bothner (bothner@kalessin.cygnus.com) - - * Makefile.in (src_all): Make less verbose output. - -Fri May 28 14:01:18 1993 Per Bothner (bothner@rtl.cygnus.com) - - * src/gen-perf.cc (Gen_Perf::change): Don't use gcc-specific - 2-operand conditional expression. - * src/key-list.cc (Key_List::output_lookup_array): - Don't use variable-size stack arrays, unless compiled by g++. - -Tue May 4 14:08:44 1993 Per Bothner (bothner@cygnus.com) - - Changes (mostly from Peter Schauer) to permit compilation - using cfront 3.0 and otherwise be ARM-conforming. - * src/key-list.h: class Key_List must use public derivation - of base class Std_Err (because Gen_Perf::operator() in gen-perf.cc - calls Std_Err::report_error). - * src/gen-perf.cc (Gen_Perf::affects_prev), src/hash-table.cc - (Hash_Table::operator()): Don't use gcc-specific 2-operand - conditional expression. - * src/iterator.cc (Iterator::operator()): Don't use gcc-specific - range construct in case label. - * key-list.cc (Key_List::output_lookup_array, Key_List::read_keys), - src/gen-perf.cc (Gen_Perf::operator(), src/read-line.cc - (Read_Line::readln_aux): If not gcc, don't allocate - variable-sized arrays on stack. - * src/new.cc (operator new): Argument type should be size_t. - * key-list.cc (Key_List::output_lookup_array, Key_List::read_keys), - new/cc (::operator new): Don't use non-standard >?= operator. - -Tue Apr 27 20:11:30 1993 Per Bothner (bothner@cygnus.com) - - * src/Makefile.in: Define TARGETPROG, and use it. - -Mon Apr 19 00:29:18 1993 Per Bothner (bothner@cygnus.com) - - * Makefile.in, configure.in: Re-vamped configure scheme. - * gperf.texinfo: Renamed to gperf.texi. - * src/bool-array.{h,cc}: ANSIfy bzero->memset. - -Sat Jan 30 20:21:28 1993 Brendan Kehoe (brendan@lisa.cygnus.com) - - * tests/Makefile.in (mostlyclean): Also delete aout, cout, m3out, - pout, and preout. - -Tue Dec 29 08:58:17 1992 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in: pass $(FLAGS_TO_PASS) to all calls to make. - (FLAGS_TO_PASS): added INSTALL, INSTALL_DATA, INSTALL_PROGRAM. - -Mon Dec 21 18:46:46 1992 Per Bothner (bothner@rtl.cygnus.com) - - * tests/expected.* renamed to *.exp to fit in 14 chars. - * tests/Makefile.in: Update accordingly. - Also rename output.* to *.out. - * src/Makefile.in (clean): Remove gperf program. - -Wed Dec 9 14:33:34 1992 Per Bothner (bothner@cygnus.com) - - * src/hash-table.cc, src/bool-array.h: ANSIfy bzero->memset. - -Thu Dec 3 19:34:12 1992 Per Bothner (bothner@cygnus.com) - - * Makefile.in (distclean, realclean): Don't delete - Makefile before recursing. - -Fri Nov 6 13:41:49 1992 Per Bothner (bothner@rtl.cygnus.com) - - * key-list.{h,cc}: Remove MAX_INT (and similar) constant - fields from Key_List class, and use INT_MAX (etc) from limits.h. - * key-list.{h,cc}, options.{h,cc}, vectors.h: Removed all - uses of initialized const fields, as they are non-standard - - and their use was easy to do away with. Mostly, just - made the constants static non-fields in the .cc file. - -Mon Nov 2 13:10:11 1992 Per Bothner (bothner@cygnus.com) - - * tests/Makefile.in: When generating cinset.c, don't pass -C, - since -C assumes an ANSI compiler. Add the -C flag (with -a) - when generating test.out.3 instead. - * tests/expected.out.3: Update accordingly. - -Wed Aug 12 11:47:54 1992 Per Bothner (bothner@cygnus.com) - - * Makefile.in: Factor out common flags into $(FLAGS_TO_PASS). - * Makefile.in: 'install-info' depends on gperf.info. - -Mon Aug 10 11:39:52 1992 Ian Lance Taylor (ian@dumbest.cygnus.com) - - * Makefile.in, src/Makefile.in: always create installation - directories. - -Mon Jul 20 15:33:21 1992 Mike Stump (mrs@cygnus.com) - - * src/new.cc (operator new): Add cast from void * to char *, - since it is not a standard conversion. - -Wed Jun 17 16:25:30 1992 Per Bothner (bothner@rtl.cygnus.com) - - * src/gen-perf.cc: #include <_G_config.h> for _G_SYSV. - * src/key-list.cc: alloca() hair. - * src/main.cc (main): Only call getrlimit if _G_HAVE_SYS_RESOURCE. - * Makefile,in, {src,test}/Makefile.in: Fix *clean rules. - -Fri May 29 13:21:13 1992 Per Bothner (bothner@rtl.cygnus.com) - - * src/gen-perf.cc: Replace USG -> _G_SYSV. - -Thu May 14 13:58:36 1992 Per Bothner (bothner@rtl.cygnus.com) - - * src/Makefile.in: Don't pass obsolete flag -DUNLIMIT_STACK. - * tests/Makefile.in (clean): Fix. - -Sat Mar 7 00:03:56 1992 K. Richard Pixley (rich@rtl.cygnus.com) - - * gperf.texinfo: added menu item hook. - -Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com) - - * Makefile.in, configure.in: removed traces of namesubdir, - -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced - copyrights to '92, changed some from Cygnus to FSF. - -Sun Jan 26 19:21:58 1992 Per Bothner (bothner at cygnus.com) - - * tests/Makefile.in: Use re-directed stdin instead of file - name in argv. This allows us to remove the filename - from the output, the expected output, and hence the diffs. - (Note that the input file is in $(srcdir), which we cannot - place in the expected out files.) - * tests/expected.out.[1235]: Edit out input filename, - to match new output. - -Thu Jun 28 16:17:27 1990 Doug Schmidt (schmidt at brilliant) - - * Wow, first fix on the new job! There was a dumb error - in Key_List::output_lookup_function, where I printed the - string "&wordlist[key]" instead of the correct "&wordlist[index]". - - * Added a couple of #ifdefs for USG support. - -Sun Jun 3 17:16:36 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Updated the version number to 2.5 and sent to Doug Lea for release - with the latest GNU libg++. - - * Changed the error handling when a keyword file cannot be opened - (now calls perror). - -Wed May 30 14:49:40 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Instrumented the source code with trace statements automagically - inserted using my new automated trace instrumentation tool! - -Wed May 9 11:47:41 1990 Doug Schmidt (schmidt at siam.ics.uci.edu) - - * Really fixed the previous bug. Turns out that a small amount - of logic had to be duplicated to handle static links that occur - as part of dynamic link chains. What a pain!!! - -Tue May 8 23:11:44 1990 Doug Schmidt (schmidt at siam.ics.uci.edu) - - * Fixed a stupid bug in Key_List::output_lookup_array that was - causing incorrect counts to be generated when there were both - static and dynamic links occurring for the same hash value. - Also simplified the code that performs the logic in this routine. - -Mon Apr 30 17:37:24 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Fixed stupid bug in Key_List::output_lookup_array that was - making the generated lookup[] array contain `chars' even - when the values stored in the chars are greater than 127! - - * Changed the behavior of the -G (global table) option so that it - will output the `length[]' array in the global scope along with - the `word_list[]' array. - - * Fixed a stupid bug in Key_List::output_lookup_function that - would always output the complicated `duplicate-handling' lookup - logic, even when there were no duplicates in the input! - - * Yikes, had to modify a bunch of stuff in key-list.cc to correctly - handle duplicate entries. Changed the generated code so that - the MIN_HASH_VALUE is no longer subtracted off when calculating - the hash value for a keyword. This required changing some other - code by substituting MAX_HASH_VALUE for TOTAL_KEYS in several places. - Finally, this means that the generated tables may contain leading - null entries, but I suppose it is better to trade-off space to get - faster performance... - -Mon Mar 26 13:08:43 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Updated version number to 2.4 to reflect the latest changes. - - * Changed the main program so that it always prints out gperf's - execution timings to the generated output file. - -Sun Mar 25 12:39:30 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Added the -Z option so that users can specify the name of the - generated class explicitly. Updated documentation to reflect - this change. - - * Modified the generated C++ class interface so that the functions - are declared static (to remove the overhead of passing the `this' - pointer). This means that operator()() can no longer be used, - since it only works on non-static member functions. - Also changed things so that there is no constructor (why waste - the extra call, when it doesn't do anything, eh?) - - * Modified the behavior of Key_List::output when the -L C++ option - is enabled. Previously the code generated use const data members - to record MIN_WORD_LENGTH, MIN_HASH_VALUE, etc. However, as - pointed out by James Clark this may result in suboptimal behavior - on the part of C++ compilers that can't inline these values. - Therefore, the new behavior is identical to what happens with - -L C, i.e., either #defines or function-specific enums are used. - Why sacrifice speed for some abstract notion of `code purity?' ;-) - -Tue Mar 6 18:17:42 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Added the -E option that defines constant values using an enum - local to the lookup function rather than with #defines. This - also means that different lookup functions can reside in the - same file. Thanks to James Clark (jjc@ai.mit.edu). - -Sat Mar 3 20:19:00 1990 Doug Schmidt (schmidt at zola.ics.uci.edu) - - * Added a special case to key_list::output_switch that doesn't - generate extra comparisons when the `-S' is given an argument - of 1 (the normal case). This should speed up the generated - code output a tad... - -Fri Feb 23 14:21:28 1990 Doug Schmidt (schmidt at zola.ics.uci.edu) - - * Renamed all instances of member function get_keysig_size - to get_max_keysig_size, since this is more precise... - - * Changed all occurrences of charset to keysig (stands for ``key - signature'') to reflect the new naming convention used in the - USENIX paper. - -Thu Feb 22 11:28:36 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Changed the name of the generated associated values table from - asso_value to asso_values to reflect conventions in the USENIX - C++ paper. - -Thu Feb 15 23:29:03 1990 Doug Schmidt (schmidt at zola.ics.uci.edu) - - * Updated the gperf.texinfo file to fix some formatting problems - that had crept in since last time. - -Wed Feb 14 23:27:24 1990 Doug Schmidt (schmidt at zola.ics.uci.edu) - - * Fixed stupid bug in key-list.cc (get_special_input), wher - gperf replaced each '%' with the succeeding character. - - * Added support for multiple target language generation. Currently - handled languages are C and C++, with C as the default. Updated - documentation and option handler to reflect the changes. - - * Added a global destructor to new.cc and removed the #ifdef, since - the bloody thing now works with libg++. - -Mon Feb 14 13:00:00 1990 Doug Schmidt (schmidt at zola.ics.uci.edu) - - * Found out that my gperf paper was accepted at the upcoming - USENIX C++ Conference in San Francisco. Yow! - -Tue Jan 30 09:00:29 1990 Doug Schmidt (schmidt at zola.ics.uci.edu) - - * #ifdef'd out the new.cc memory allocator, since there are - problems with this and the libg++ stuff. - - * Changed key-list.h so that class Vectors is a public (rather - than private) base class for class Key_List. The previous - form was illegal C++, but wasn't being caught by the old - g++ compiler. Should work now... ;-) - -Sun Dec 10 14:08:23 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Added several changes from rfg@ics.uci.edu. These changes - help to automate the build process. - -Wed Nov 15 15:49:33 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) - - * Removed conditional compilation for GATHER_STATISTICS. There's - really no good reason to avoid collecting this info at run-time, - since that section of code is *hardly* the bottleneck... ;-) - - * Simplified the C output routines in Key_List::set_output_types - and Key_List::output_keyword_table a bit in order to - speed-up and clean up the code generation. - - * Modified function Key_List::get_special_input so that it does - not try to `delete' a buffer that turned out to be too short. - This is important since the new memory management scheme - does not handle deletions. However, adding a small amount of - garbage won't hurt anything, since we generally don't do this - operation more than a couple times *at most*! - - * Created a new file (new.cc) which includes my own overloaded - operator new. This function should dramatically reduce the - number of calls to malloc since it grabs large chunks and - doles them out in small pieces. As a result of this change - the class-specific `operator new' was removed from class List_Node. - -Tue Nov 14 21:45:30 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Continued to refine the great hack. The latest trick is to - try and replace most uses of dynamic memory (i.e., calls to - new) with uses of gcc dynamic arrays (i.e., an alloca solution). - This makes life much easier for the overall process-size, since - it reduces the amount of overhead for memory management. As a - side-effect from this change there is no reason to have the - Bool_Array::dispose member function, so it's outta here! - - * Fixed a stupid bug that was an disaster waiting to happen... - Instead of making the boolean array large enough to index - max_hash_value it was only large enough to index max_hash_value - - 1. Once again, an off-by-one mistake in C/C++!!!! - -Mon Nov 13 19:38:27 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Added the final great hack! This allows us to generate hash tables - for near-perfect hash functions that contain duplicates, *without* - having to use switch statements! Since many compilers die on large - switch statements this feature is essential. Furthermore, it appears - that the generated code is often *smaller* than that put out by - compilers, even though a large, sparse array must be created. - Here's the general idea: - - a. Generate the wordlist as a contiguous block of keywords, - just as before when using a switch statement. This - wordlist *must* be sorted by hash value. - - b. Generate the lookup array, which is an array of signed - {chars,shorts,ints}, (which ever allows full coverage of - the wordlist dimensions). If the value v, where v = - lookup[hash(str,len)], is >= 0 and < TOTAL_KEYWORDS, then we - simply use this result as a direct access into the wordlist - array to snag the keyword for comparison. - - c. Otherwise, if v is < -TOTAL_KEYWORDS or > TOTAL_KEYWORDS - this is an indication that we'll need to search through - some number of duplicates hash values. Using a hash - linking scheme we'd then index into a different part of - the hash table that provides the starting index and total - length of the duplicate entries to find via linear search! - -Sun Nov 12 13:48:10 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) - - * Simplified Key_List::output_min_max considerably by recognizing - that since the keyword list was already sorted by hash value finding - the min and max values is trivial! - - * Improved the debugging diagnostics considerably in classes Key_List, - Hash_Table, and Gen_Perf. - - * Modified the `-s' option so that a negative argument is now - interpreted to mean `allow the maximum associated value to be - about x times *smaller* than the number of input keys.' This - should help prevent massive explosion of generated hash table - size for large keysets. - -Sat Nov 11 11:31:13 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Added a field in class Key_List that counts the total number - of duplicate keywords, both static and dynamic. - - * Added a new member function Bool_Array that deletes the dynamic - memory allocated to Bool_Array::storage_array. This space may - be needed for subsequent options, so it made sense to free it as - soon as possible... - - * Renamed file/class Alpha_Vectors to Vectors, to avoid problems - with 14 character length filenames on SYSV. Also changed file - adapredefined.gperf to adadefs.gperf in the ./tests directory. - - * Modified class Options by changing the member function - Options::total_positions to Options::get_charset_size and - Options::set_charset_size. These two routines now either return - the total charset size *or* the length of the largest keyword - if the user specifies the -k'*' (ALLCHARS) option. This change - cleans up client code. - - * Merged all the cperf changes into gperf. - - * Made sure to explicitly initialize perfect.fewest_collisions to - 0. - - * Cleaned up some loose ends noticed by Nels Olson. - 1. Removed `if (collisions <= perfect.fewest_collisions)' - from Gen_Perf::affects_prev since it was superfluous. - 2. Removed the fields best_char_value and best_asso_value - from Gen_Perf. There were also unnecessary. - 3. Fixed a braino in the Bool_Array::bool_array_reset - function. Since iteration numbers can never be zero - the `if (bool_array.iteration_number++ == 0)' must be - `if (++bool_array.iteration_number == 0).' - 4. Modified Std_Err::report_error so that it correctly handles - "%%". - - * It is important to note that -D no longer enables -S. - There is a good reason for this change, which will become - manifested in the next release... (suspense!). - - * Made some subtle changes to Key_List::print_switch so that if finally - seems to work correctly. Needs more stress testing, however... - - * Made a major change to the Key_List::print_switch function. - The user can now specify the number of switch statements to generate - via an argument to the -S option, i.e., -S1 means `generate 1 - switch statement with all keywords in it,' -S2 means generate - 2 switch statements with 1/2 the elements in each one, etc. - Hopefully this will fix the problem with C compilers not being - able to generate code for giant switch statements (but don't - hold your breath!) - - * Changed Key_List::length function to Key_List::keyword_list_length. - - * Added a feature to main.c that prints out the starting wall-clock - time before the program begins and prints out the ending wall-clock - time when the program is finished. - - * Added the GATHER_STATISTICS code in hash-table.c so we can - keep track of how well double hashing is doing. Eventually, - GATHER_STATISTICS will be added so that all instrumentation - code can be conditionally compiled in. - - * Fixed a stupid bug in Key_List::print_switch routine. This - was necessary to make sure the generated switch statement worked - correctly when *both* `natural,' i.e., static links and dynamic - links, i.e., unresolved duplicates, hash to the same value. - - * Modified Bool_Array::~Bool_Array destructor so that - it now frees the bool_array.storage_array when it is no longer - needed. Since this array is generally very large it makes sense - to return the memory to the freelist when it is no longer in use. - - * Changed the interface to constructor Hash_Table::Hash_Table. This - constructor now passed a pointer to a power-of-two sized buffer that - serve as storage for the hash table. Although this weakens information - hiding a little bit it greatly reduces dynamic memory fragmentation, - since we can now obtain the memory via a call to alloca, rather - than malloc. This change modified Key_List::read_keys calling - interface. - - * Since alloca is now being used more aggressively a conditional - compilation section was added in main.c. Taken from GNU GCC, - this code gets rid of any avoidable limit on stack size so that - alloca does not fail. It is only used if the -DRLIMIT_STACK - symbol is defined when gperf is compiled. - - * Added warnings in option.c so that user's would be informed - that -r superceeds -i on the command-line. - - * Rewrote Gen_Perf::affects_prev. First, the code structure - was cleaned up considerably (removing the need for a dreaded - goto!). Secondly, a major change occurred so that Gen_Perf::affects_prev - returns FALSE (success) when fewest_hits gets down to whatever - it was after inserting the previous key (instead of waiting for - it to reach 0). In other words, it stops trying if it can - resolve the new collisions added by a key, even if there are - still other old, unresolved collisions. This modification was - suggested by Nels Olson and seems to *greatly* increase the - speed of gperf for large keyfiles. Thanks Nels! - - * In a similar vein, inside the Gen_Perf::change routine - the variable `perfect.fewest_collisions is no longer initialized - with the length of the keyword list. Instead it starts out at - 0 and is incremented by 1 every time change () is called. - The rationale for this behavior is that there are times when a - collision causes the number of duplicates (collisions) to - increase by a large amount when it would presumably just have - gone up by 1 if none of the asso_values were changed. That is, - at the beginning of change(), you could initialize fewest_hits - to 1+(previous value of fewest_hits) instead of to the number of - keys. Thanks again, Nels. - - * Replaced alloca with new in the Gen_Perf::change function. - This should eliminate some overhead at the expense of a little - extra memory that is never reclaimed. - - * Renamed Gen_Perf::merge_sets to Gen_Perf::compute_disjoint_union - to reflect the change in behavior. - - * Added the -e option so users can supply a string containing - the characters used to separate keywords from their attributes. - The default behavior is ",\n". - - * Removed the char *uniq_set field from LIST_NODE and modified - uses of uniq_set in perfect.c and keylist.c. Due to changes - to Gen_Perf::compute_disjoint_sets this field was no longer - necessary, and its removal makes the program smaller and - potentially faster. - - * Added lots of changes/fixes suggested by Nels Olson - (umls.UUCP!olson@mis.ucsf.edu). In particular: - 1. Changed Bool_Array so that it would dynamically create - an array of unsigned shorts rather than ints if the - LO_CAL symbol was defined during program compilation. - This cuts the amount of dynamic memory usage in half, - which is important for large keyfile input. - 2. Added some additional debugging statements that print extra - info to stderr when the -d option is enabled. - 3. Fixed a really stupid bug in Key_List::print_switch - A right paren was placed at the wrong location, which broke - strlen (). - 4. Fixed a subtle problem with printing case values when keylinks - appear. The logic failed to account for the fact that there - can be keylinks *and* regular node info also! - 5. Changed the behavior of Key_List::read_keys so that it would - honor -D unequivocally, i.e., it doesn't try to turn off dup - handling if the user requests it, even if there are no - immediate links in the keyfile input. - 6. Modified the -j option so that -j 0 means `try random values - when searching for a way to resolve collisions.' - 7. Added a field `num_done' to the Gen_Perf struct. This is used - to report information collected when trying to resolve - hash collisions. - 8. Modified the merge_sets algorithm to perform a disjoint - union of two multisets. This ensures that subsequent - processing in Gen_Perf::affect_prev doesn't - waste time trying to change an associated value that is - shared between two conflicting keywords. - 9. Modified Gen_Perf::affects_prev so that it doesn't try - random jump values unless the -j 0 option is enabled. - 10. Fixed a silly bug in Gen_Perf::change. This problem caused - gperf to seg fault when the -k* option was given and the - keyfile file had long keywords. - -Sun Oct 29 00:18:55 1989 Doug Schmidt (schmidt at siam.ics.uci.edu) - - * Modified class-specific new operations for Read_Line and - List_Node so they don't fail if SIZE is larger than twice - the previous buffer size. Note we double buffer size - everytime the previous buffer runs out, as a heuristic - to reduce future calls to malloc. - -Sun Oct 22 13:49:43 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Updated gperf version number to 2.0. Send to Doug Lea for - incorporation into the long-awaited `official' libg++ 1.36 - release! - - * Thanks to Nels Olson a silly bug in Gen_Perf::change () - was fixed. This problem caused gperf to seg fault when - the -k* option was given and the keyfile file had long - keywords. - - * Modified Key_List::print_hash_function so that it output - max_hash_value + 1 (rather than just max_hash_value) for - any associated value entries that don't correspond to - keyword charset characters. This should speed up rejection - of non-keyword strings a little in some cases. - -Sat Oct 21 19:28:36 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Fixed Key_List::print_hash_function so that it no longer output - things like `return 0 + ...' Although this probably gets - optimized away by even the worst C compilers there isn't any - point tempting fate... ;-) - - * Fixed class List_Node's constructor so that it wouldn't a priori - refuse to consider trying to hash keys whose length is less - than the smallest user-specified key position. It turns out - this is not a problem unless the user also specifies the -n - (NOLENGTH) option, in which case such keys most likely - don't have a prayer of being hashed correctly! - - * Changed the name of the generated lookup table from `Hash_Table' - to `asso_value' to be consistent with the gperf paper. - -Tue Oct 17 14:19:48 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Added a flag GATHER_STATISTICS in the Makefile. If defined - during compilation this turns on certain collection facilities - that track the performance of gperf during its execution. In - particular, I want to see how many collisions occur for the - double hashing Hash_Table. - - * Added a safety check so that we don't screw up if the total - number of `resets' of the Bool_Array exceeds MAX_INT. Since - this number is around 2^31 it is unlikely that this would ever - occur for most input, but why take the risk? - - * Changed the behavior for the -a (ANSI) option so that the - generated prototypes use int rather than size_t for the LEN - parameter. It was too ugly having to #include all - over the place... - -Mon Oct 16 11:00:35 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Continued to work on the gperf paper for the USENIX C++ - conference. At some point this will be merged back into - the gperf documentation... - -Sat Oct 14 20:29:43 1989 Doug Schmidt (schmidt at siam.ics.uci.edu) - - * Added a majorly neat hack to Bool_Array, suggested by rfg. - The basic idea was to throw away the Ullman array technique. - The Ullman array was used to remove the need to reinitialize all - the Bool_Array elements to zero everytime we needed to determine - whether there were duplicate hash values in the keyword list. - The current trick uses an `iteration number' scheme, which takes - about 1/3 the space and reduces the overall program running a - time by about 20 percent for large input! The hack works as - follows: - - 1. Dynamically allocation 1 boolean array of size k. - 2. Initialize the boolean array to zeros, and consider the first - iteration to be iteration 1. - 2. Then on all subsequent iterations we `reset' the bool array by - kicking the iteration count by 1. - 3. When it comes time to check whether a hash value is currently - in the boolean array we simply check its index location. If - the value stored there is *not* equal to the current iteration - number then the item is clearly *not* in the set. In that - case we assign the iteration number to that array's index - location for future reference. Otherwise, if the item at - the index location *is* equal to the iteration number we've - found a duplicate. No muss, no fuss! - -Mon Oct 2 12:30:54 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Changed some consts in options.h to enumerals, since g++ - doesn't seem to like them at the moment! - -Sat Sep 30 12:55:24 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Fixed a stupid bug in Key_List::print_hash_function that manifested - itself if the `-k$' option was given (i.e., only use the key[length] - character in the hash function). - - * Added support for the -C option. This makes the contents of - all generated tables `readonly'. - - * Changed the handling of generated switches so that there is - only one call to str[n]?cmp. This *greatly* reduces the size of - the generated assembly code on all compilers I've seen. - - * Fixed a subtle bug that occurred when the -l and -S option - was given. Code produced looked something like: - - if (len != key_len || !strcmp (s1, resword->name)) return resword; - - which doesn't make any sense. Clearly, this should be: - - if (len == key_len && !strcmp (s1, resword->name)) return resword; - -Tue Sep 26 10:36:50 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Changed class Read_Line's definition so that it no longer - needs to know about the buffering scheme used to speed up - dynamic memory allocation of input keywords and their - associated attributes. This means that operator new is no longer - a friend of Read_Line. - -Mon Sep 25 23:17:10 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Decided that Obstacks had too much overhead, so they were - removed in favor of super-efficient, low-overhead buffered - storage allocation hacks in Read_Line and List_Node. - - * No longer try to inline functions that g++ complains about - (Key_List::Merge and Key_List::Merge_Sort). - -Sun Sep 24 13:11:24 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Changed classes Read_Line and List_Node to use Obstacks in order - to cache memory allocation for keyword strings and List_Nodes. - - * Continued to experiment with inheritance schemes. - - * Added a new file `alpha.h', that declares static data shared - (i.e., inherited) between classes List_Node and Key_List. - -Tue Sep 12 16:14:41 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Made numerous changes to incorporate multiple inheritance in - gperf. - -Wed Aug 16 23:04:08 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Added the -DCOMPILER_FIXED flag to the ./src/Makefile. This - implies that people trying to compile gperf need to have a - working version of the new g++ compiler (1.36.0). - - * Removed some extra spaces that were being added in the generated - C code. - -Mon Jul 24 17:09:46 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Fixed PRINT_HASH_FUNCTION and PRINT_LOOKUP_FUNCTION in keylist.c - so that the generated functions take an unsigned int length argument. - If -a is enabled the prototype is (const char *str, size_t len). - -Fri Jul 21 13:06:15 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) - - * Fixed a typo in PRINT_KEYWORD_TABLE in keylist.cc that prevented - the indentation from working correctly. - - * Fixed a horrible typo in PRINT_KEYWORD_TABLE in keylist.cc - that prevented links from being printed correctly. - -Tue Jul 18 16:04:31 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) - - * Fixed up readline.cc and readline.h so that they work OK - with g++ compilers that aren't completely up-to-date. - If symbol COMPILER_FIXED is defined then the behavior - that works on my more recent version of g++ is enabled. - -Sun Jul 9 17:53:28 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Changed the ./tests subdirectory Makefile so that it - uses $(CC) instead of gcc. - -Sun Jul 2 21:52:15 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Fixed a number of subtle bugs that occurred when -S was - combined with various and sundry options. - - * Added the -G option, that makes the generated keyword table - a global static variable, rather than hiding it inside - the lookup function. This allows other functions to directly - access the contents in this table. - - * Added the "#" feature, that allows comments inside the keyword - list from the input file. Comment handling takes place in readline.c. - This simplifies the code and reduces the number of malloc calls. - - * Also added the -H option (user can give the name of the hash - function) and the -T option (prevents the transfer of the type decl - to the output file, which is useful if the type is already defined - elsewhere). - -Thu Jun 22 20:39:39 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Modified many classes so that they would inherit Std_Err as - a base class. This makes things more abstract... - -Fri Jun 16 14:23:00 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) - - * Modified the -f (FAST) option. This now takes an argument. - The argument corresponds to the number of iterations used - to resolve collisions. -f 0 uses the length of the - keyword list (which is what -f did before). This makes - life much easier when dealing with large keyword files. - -Tue Jun 6 17:53:27 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Added the -c (comparison) option. Enabling this - will use the strncmp function for string comparisons. - The default is to use strcmp. - - * Fixed a typo in key_list.cc (PRINT_SWITCH). This caused - faulty C code to be generated when the -D, -p, and -t - options were all enabled. - -Thu May 25 14:07:21 1989 Doug Schmidt (schmidt at siam.ics.uci.edu) - - * Once again, changed class Read_Line to overload global operator - new. Hopefully, this will work...! - -Sun May 21 01:51:45 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Modified Key_List::print_hash_function () so that it properly - formats the associated values in the hash table according to - the maximum number of digits required to represent the largest - value. - - * Removed the named return value from class Hash_Table's - operator (), since this causes a seg fault when -O is enabled. - No sense tripping subtle g++ bugs if we don't have to.... ;-) - - * Removed the operator new hack from Read_Line, since this seemed - to create horrible bus error problems. - - * Changed many class member functions and data members to be `static', - if they don't manipulate this! - -Fri May 12 23:06:56 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Changed class Std_Err to use static member functions, a la - Ada or Modula 2. This eliminates the need for an explicit - error-handler class object. - - * Added the ``named return value'' feature to Hash_Table::operator () - and Bool_Array::operator [], just for the heck of it.... ;-) - - * Changed the previous hack in Read_Line so that we now use - the overloaded global `new' instead of NEW_STRING! - -Wed May 3 17:36:55 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) - - * Updated to version 1.7. This reflects the recent major changes - and the new C port. - - * Modified the GNU getopt.cc routine to have a class-based interface. - - * Fixed a typo in Perfect.cc ~Perfect that prevented the actual maximum - hash table size from being printed (maybe the stream classes - weren't so bad after all.... ;-). - - * Added support for the -f option. This generates the perfect - hash function ``fast.'' It reduces the execution time of - gperf, at the cost of minimizing the range of hash values. - -Tue May 2 16:23:29 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Added an efficiency hack to Read_Line. Instead of making - a call to operator NEW (a.k.a. malloc) for each input string - a new member function NEW_STRING stores a large buffer from - which new strings are carved out, growing the buffer if - necessary. It might be useful to add this throughout the - program.... - - * Removed all unnecessary calls to DELETE. If the program is about - to exit it is silly to waste time freeing memory. - - * Added the GNU getopt program to the distribution. This makes - GPERF portable to systems that don't include getopt in libc. - - * Added a strcspn member to class Key_List. This also increases - portability. - - * Added the get_include_src function from keylist.c as a member - function in class Key_List. Hopefully every function is - now associated with a class. This aids abstraction and - modularity. - - * Ported gperf to C. From now on both K&R C and GNU G++ versions - will be supported. There will be two ChangeLog files, one - for each version of the program. - -Mon May 1 16:41:45 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Fixed a bug with -k'*'. This now prints out *all* the cases - up to the length of the longest word in the keyword set. - -Sun Apr 30 12:15:25 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Removed all use of the stream classes. Too ugly, slow, and - not handled by the c++-mode formatter.... - - * Modified the handling of links (i.e., keywords that have - identical hash values as other keywords). This should - speed up hash function generation for keyword sets with - many duplicate entries. The trick is to treat duplicate - values as equivalence classes, so that each set of duplicate - values is represented only once in the main list processing. - - * Fixed some capitialization typos and indentations mistakes in - Key_List::print_hash_function. - -Sat Apr 29 12:04:03 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) - - * Fixed a typo/logico in Key_List::print_switch that prevented - the last keyword in the keyword list to be print out. This - requires further examination..... - - * Fixed a stupid bug in List_Node::List_node. If the -k'*' option - was enabled the KEY_SET string wasn't getting terminated with - '\0'! - -Fri Apr 28 12:38:35 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Renamed strexp.h and strexp.cc to iterator.h and iterator.cc. - Also changed the strexp class to iterator. Continued to work - on style... - - * Updated the version number to 1.6. This reflects all the - recent changes. - -Thu Apr 27 00:14:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Added the -D option that properly handles keyword sets that - contain duplicate hash values. - - * Continued the stylistic changes. Added the #pragma once - directive to all the *.h files. Removed all #defines and - replaced them with static consts. Also moved the key_sort - routine from options.cc into the options class as a - member function. - -Mon Apr 3 13:26:55 1989 Doug Schmidt (schmidt at zola.ics.uci.edu) - - * Made massive stylistic changes to bring source code into - conformance with GNU style guidelines. - -Thu Mar 30 23:28:45 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Fixed up the output routines so that they generate code - corresponding to the GNU style guidelines. - -Sat Mar 11 13:12:37 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Fixed Stderr constructors so that they wouldn't try to - use the base class initializer syntax for the static - class variable Program_Name. G++ 1.34 is stricter in - enforcing the rules! - -Fri Mar 10 11:24:14 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Removed -v and ``| more'' from the Makefile to keep rfg happy... - -Thu Mar 2 12:37:30 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Sent latest GNU gperf version 1.5 to Doug Lea for inclusion - into libg++ 1.34. Note that there is a small bug with - the new %{ ... %} source inclusion facility, since it doesn't - understand comments and will barf if %{ or %} appear nested - inside the outermost delimiters. This is too trivial of - a defect to fix at the moment... - -Tue Feb 28 11:19:58 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Added the -K option, which allows the user to provide a - alternative name for the keyword structure component. - The default is still ``name.'' - - * Added the LEX and YACC-like ability to include arbitrary - text at the beginning of the generated C source code output. - This required two new functions Get_Special_Input, - Key_List::Save_Include_Src; - - * Fixed memory allocation bug in Key_List::Set_Types. - Variable Return_Type needs 1 additional location - to store the "*" if the -p option is used. - - * Added code to NULL terminate both Struct_Tag and Return_Type, - *after* the strncpy (stupid mistake). - -Mon Feb 27 14:39:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Added a new option -N. This allows the user to specify the - name to be used for the generated lookup function. The - default name is still ``in_word_set.'' This makes it - possible to completely automate the perfect hash function - generation process! - -Mon Feb 20 23:33:14 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Corrected the Hash_Table::operator () function so that - *it* is responsible for deciding when a new key has the - same signature as a previously seen key. The key length - information is now used internally to this function to - decide whether to add to the hash table those keys with - the same key sets, but different lengths. Before, this - was handled by the Key_List::Read_Keys function. However, - this failed to work for certain duplicate keys, since - they weren't being entered into the hash table properly. - -Sun Feb 19 16:02:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Modified class Options by moving the enum Option_Type out - of the class. This is to satisfy the new enumeration - scope rules in C++. - -Sun Jan 15 15:12:09 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Incremented the version number upto 1.4 to reflect the new - options that affect the generated code. Send the new - distribution off to Michael for use with g++ 1.33. - - * Added a fix to Key_List::Read_Keys so that it checks for links - properly when the -n option is used. Previously, it didn't - catch obvious links, which caused it to spend large amount - of time searching for a solution that could never occur! - - * Modified the Key_List data structure to record *both* the - minimum and the maximum key lengths. This information - is now computed in Key_List::Read_Keys, and thus - Key_List::Print_Min_Max doesn't need to bother. - - * Modifed the key position iterator scheme in options.cc to - eliminate the need for member function Options::Advance. - Now, the Options::Get function performs the advancement - automatically, obviating the need for an extra function call. - - * Added the new function Options::Print_Options, to print out - the user-specified command line options to generated C - output file. - - * Added a new function, Key_List::Print_Keylength_Table, - which creates a table of lengths for use in speeding - up the keyword search. This also meant that a new - option, -l (LENTABLE) is recognized. It controls - whether the length table is printed and the comparison - made in the generated function ``in_word_set.'' - - * Added a comment at the top of the generated C code - output file that tells what version of gperf was used. - Next, I'll also dump out the command line options - as a comment too. Thanks to Michael Tiemann for the - feedback on this. - - * Fixed the -n option to make it work correctly with - other parts of the program (most notably the Perfect::Hash - function and the computation of minimum and maximum lengths. - -Fri Jan 13 21:25:27 1989 Doug Schmidt (schmidt at siam.ics.uci.edu) - - * Realized the the need to add a test that will enable - optimziation of the generated C code in the ``hash'' function - by checking whether all the requested key positions are - guaranteed to exist due to the comparison in `in_word_set.'' - I'll put this in soon.... - -Thu Jan 12 20:09:21 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Added pascal, modula3, and modula2 tests inputs to the - Makefile - - * Recognised that there is a bug with the -n option. However - I'm too busy to fix it properly, right now. The problem - is that the generated #define end up being 0, since that's - my hack to make -n work. This needs complete rethinking! - -Tue Jan 10 00:08:16 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Added a new option, -n, that instructs gperf to not use the - length of an identifier when computing the hash functions. - I'm not sure how useful this is! - - * Retransmitted the distribution to rocky.oswego.edu. Hopefully, - this will work! - - * Began fixing the indentation and capitalization to conform - to the GNU coding guidelines. - -Mon Jan 9 22:23:18 1989 Doug Schmidt (schmidt at pompe.ics.uci.edu) - - * Fixed horrible bug in Read_Line::Readln_Aux. This was - a subtle and pernicous off-by-1 error, that overwrote - past the last character of the input string buffer. I - think this fault was killing the vax! - - * Yow, fixed an oversight in List_Node::List_Node, where the - pointer field Next was uninitialized. Luckily, the new routine - seems to return 0 filled objects the first time through! - -Sun Jan 8 13:43:14 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Modified the ``key linked'' diagnostic in Key_List::Read_Keys - to be more helpful and easy to read. - - * Fixed the List_Node::List_Node so that it would ignore trailing - fields if the -t option was not enabled. - - * Moved the List_Node declarations out of keylist.h and - into a file of its own, called listnode.cc and listnode.h - Made Set_Sort a member function of class List_Node. - - * Massively updated the documentation in the gperf.texinfo file. - - * Polished off the major revision to the print functions, - added a few new tests in the Makefile to check for the - validity of the program and ftp'ed the entire distribution - off to Doug Lea for libg++. ( changed it to - 1.3 to reflect the major changes with the generated - C code ). - - * Fixed Key_List::Print_Switch to deal with the -p and -t options. - This meant that the ``still-born'' function Key_List:: - Print_Type_Switch was superflous, so I removed it. - Also, removed the restriction in Option that the -p and - -t options couldn't be used simultaneously. - - * Modified List_Node::List_Node, to perform only 1 call to - ``new'' when dynamically allocating memory for the Key_Set - and the Uniq_Set. - -Sat Jan 7 14:10:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu) - - * Fixed a big bug with the new policy of nesting the - wordlist inside of generated function ``in_word_set.'' - I'd forgotten to declare the wordlist array as static! - ( arrgh ). - - * Added a new function Key_List::Set_Types, that figures out - the return type for generated function ``in_word_set,'' - the user-defined ``struct tag,'' if one is used, and also - formates the array type for the static local array. - - * Changed the print routines to take advantage of the - new -p option. - - * Began adding the hooks to allow the return of a pointer - to a user defined struct location from the generated - ``in_word_set'' function instead of the current 0 or 1 - return value. Created function Key_List::Print_Type_Switch - and added option -p to class Option, allowing the user to - request generation of the aforementioned pointers returned - instead of booleans. - - * Put in checks in class Option to make sure that -S and -t - options are not used simultaneously. This restriction - will be removed in subsequent releases, once I decide on - a clean way to implement it. - - * Sent version 1.2 to Doug Lea for possible inclusion into - the libg++ distribution. - - * Moved the static word_list array inside the generated function - in_word_set. This supports better data hiding. - - * Added a texinfo file, gperf.texinfo - - * Revised the Makefile to cleanup the droppings from texinfo - and changed the name of gperf.cc and gperf.h to perfect.cc - and perfect.h. - -Fri Jan 6 13:04:45 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu) - - * Implemented the switch statement output format. Much better - for large datasets in terms of space used. - - * Added new functions to break up the Key_List::Output function. - Functions added were Key_List::Print_Switch, Key_List::Print_Min_Max, - Key_List::Print_Keyword_Table, Key_List::Print_Hash_Function, - and Key_List::Print_Lookup_Function. This simplifies the - big mess in Key_List::Output considerably! - - * Added switch statement option to Options, which potentially - trades time for space in the generated lookup code. - -Thu Jan 5 22:46:34 1989 Doug Schmidt (schmidt at siam.ics.uci.edu) - - * Released version 1.1 - - * Fixed a bug with Gperf::Merge_Set, it was skipping letters shared - between the Set_1 and Set_2. - - * Added the optimal min/max algorithm in Key_List::Output. This - runs in O ( 3n/2 ), rather than O ( 2n ) time. - - * Changed Gperf::Sort_Set to use insertion sort, rather than - bubble sort. - - * Added a check in Key_List::Output for the special case where - the keys used are 1,$. It is possible to generate more - efficient C code in this case. diff --git a/contrib/gperf/FREEBSD-Xlist b/contrib/gperf/FREEBSD-Xlist deleted file mode 100644 index adb468037113..000000000000 --- a/contrib/gperf/FREEBSD-Xlist +++ /dev/null @@ -1,12 +0,0 @@ -$FreeBSD$ -*/*.dvi -*/*.html -*/*.info -*/*.ps -*/texinfo.tex -*/tests -*/getopt* -*/*.pdf -*/*.vms -*/*.msvc -*/*.woe32 diff --git a/contrib/gperf/INSTALL b/contrib/gperf/INSTALL deleted file mode 100644 index ab676eb374b3..000000000000 --- a/contrib/gperf/INSTALL +++ /dev/null @@ -1,183 +0,0 @@ -Basic Installation -================== - - These are generic installation instructions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, a file -`config.cache' that saves the results of its tests to speed up -reconfiguring, and a file `config.log' containing compiler output -(useful mainly for debugging `configure'). - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If at some point `config.cache' -contains results you don't want to keep, you may remove or edit it. - - The file `configure.ac' is used to create `configure' by a program -called `autoconf'. You only need `configure.ac' if you want to change -it or regenerate `configure' using a newer version of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. - - Running `configure' takes a while. While running, it prints some - messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. You can give `configure' -initial values for variables by setting them in the environment. Using -a Bourne-compatible shell, you can do that on the command line like -this: - CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure - -Or on systems that have the `env' program, you can do it like this: - env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. - - If you have to use a `make' that does not supports the `VPATH' -variable, you have to compile the package for one architecture at a time -in the source code directory. After you have installed the package for -one architecture, use `make distclean' before reconfiguring for another -architecture. - -Installation Names -================== - - By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PATH'. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PATH', the package will use -PATH as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=PATH' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - -Optional Features -================= - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - -Specifying the System Type -========================== - - There may be some features `configure' can not figure out -automatically, but needs to determine by the type of host the package -will run on. Usually `configure' can figure that out, but if it prints -a message saying it can not guess the host type, give it the -`--host=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name with three fields: - CPU-COMPANY-SYSTEM - -See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the host type. - - If you are building compiler tools for cross-compiling, you can also -use the `--target=TYPE' option to select the type of system they will -produce code for and the `--build=TYPE' option to select the type of -system on which you are compiling the package. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Operation Controls -================== - - `configure' recognizes the following options to control how it -operates. - -`--cache-file=FILE' - Use and save the results of the tests in FILE instead of - `./config.cache'. Set FILE to `/dev/null' to disable caching, for - debugging `configure'. - -`--help' - Print a summary of the options to `configure', and exit. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`--version' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`configure' also accepts some other, not widely useful, options. - diff --git a/contrib/gperf/Makefile.devel b/contrib/gperf/Makefile.devel deleted file mode 100644 index 566c8686c7eb..000000000000 --- a/contrib/gperf/Makefile.devel +++ /dev/null @@ -1,44 +0,0 @@ -# This is the developer's makefile, not the user's makefile. -# Don't use it unless you know exactly what you do! - -SHELL = /bin/sh -MAKE = make - -all : configures src/config.h.in src/config.h.msvc src/config.h_vms doc/gperf.1 - -CONFIGURES = configure lib/configure src/configure tests/configure doc/configure - -configures : $(CONFIGURES) - -configure : configure.ac aclocal.m4 - autoconf -I . - -lib/configure : lib/configure.ac aclocal.m4 - cd lib && autoconf -I .. - -src/configure : src/configure.ac aclocal.m4 - cd src && autoconf -I .. - -tests/configure : tests/configure.ac aclocal.m4 - cd tests && autoconf -I .. - -doc/configure : doc/configure.ac aclocal.m4 - cd doc && autoconf -I .. - -check-configures : $(CONFIGURES) - set -e; for f in $(CONFIGURES); do bash -x -n $$f; done - -src/config.h.in : src/configure.ac aclocal.m4 - cd src && autoheader -I .. - -src/config.h.msvc : src/config.h.in - cp src/config.h.in src/config.h.msvc - -src/config.h_vms : src/config.h.in - cp src/config.h.in src/config.h_vms - -doc/gperf.1 : force - prog=`PATH=build/src:src:$$PATH which gperf`; if test -n "$$prog"; then doc/help2man --name='generate a perfect hash function from a key set' --section=1 $$prog > doc/gperf.1; fi - -force : - diff --git a/contrib/gperf/Makefile.in b/contrib/gperf/Makefile.in deleted file mode 100644 index 979156f38ea5..000000000000 --- a/contrib/gperf/Makefile.in +++ /dev/null @@ -1,64 +0,0 @@ -# Makefile for gperf - -# Copyright (C) 1989, 1992, 1993, 1998, 2002 Free Software Foundation, Inc. -# Written by Douglas C. Schmidt -# and Bruno Haible . -# -# This file is part of GNU GPERF. -# -# GNU GPERF is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU GPERF is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; see the file COPYING. -# If not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#### Start of system configuration section. #### - -# Programs used by "make": -RM = rm -f -@SET_MAKE@ - -#### End of system configuration section. #### - -SHELL = /bin/sh - -all : force - cd @subdir@; $(MAKE) all - -install : force - cd @subdir@; $(MAKE) install - -installdirs : force - cd @subdir@; $(MAKE) installdirs - -uninstall : force - cd @subdir@; $(MAKE) uninstall - -check : force - cd @subdir@; $(MAKE) check - -mostlyclean : force - cd @subdir@; $(MAKE) mostlyclean - -clean : force - cd @subdir@; $(MAKE) clean - -distclean : force - cd @subdir@; if test -f Makefile; then $(MAKE) distclean; fi - $(RM) config.status config.log config.cache Makefile - -maintainer-clean : force - cd @subdir@; if test -f Makefile; then $(MAKE) maintainer-clean; fi - $(RM) config.status config.log config.cache Makefile - -force : - diff --git a/contrib/gperf/NEWS b/contrib/gperf/NEWS deleted file mode 100644 index dddf42707da7..000000000000 --- a/contrib/gperf/NEWS +++ /dev/null @@ -1,91 +0,0 @@ -New in 3.0.3: - -* The generated C code is compatible with gcc-4.3.x in c99 or gnu99 mode. - -New in 3.0.2: - -* Compiles with g++-4.0.x. -* Added option --length-table-name. -* Added declaration %define length-table-name. -* Fixed #line directives for filenames containing backslashes. - -New in 3.0.1: - -* Bug fix. - -New in 3.0: - -* Added option --output that allows to specify the output file name. -* Some options have been renamed: - --hash-fn-name=NAME --> --hash-function-name=NAME - --lookup-fn-name=NAME --> --lookup-function-name=NAME - --compare-strlen --> --compare-lengths - --global --> --global-table - The older variants are still supported for backward compatibility. -* The following options can now be specified inside the input file: - %delimiters=DELIMITER-LIST - %struct-type - %ignore-case - %language=LANGUAGE-NAME - %define slot-name NAME - %define initializer-suffix INITIALIZERS - %define hash-function-name NAME - %define lookup-function-name NAME - %define class-name NAME - %7bit - %compare-lengths - %compare-strncmp - %readonly-tables - %enum - %includes - %global-table - %pic - %define string-pool-name NAME - %null-strings - %define word-array-name NAME - %switch=COUNT - %omit-struct-type -* When the option -k is not given, the default key positions are now - computed depending on the set of keywords. -* If the input file is given by name, the output file will now contain - #line directives referring to the input file. -* Some keyword sets containing permutations, like { "xy", "yx", "xz", "zx" } - or { "abc", "acb", "bca", "cab" }, are now handled by gperf without - requiring the option -D. -* The generated table is usually much smaller than it was with earlier - versions of gperf. -* Added option -m/--multiple-iterations that allows to further reduce the - size of the generated table. -* When the search for a good hash function is not immediately successful, - the table's size will grow as needed. Earlier versions of gperf bailed - out with an "Internal error, duplicate hash code value". -* The options -f/--fast and -o/--occurrence-sort have no effect any more. -* Added options -P/--pic and --null-strings that optimize the generated code - for use in shared libraries. -P/--pic does a perfect optimization but may - require some small code changes (see the documentation for details), whereas - --null-strings does only a half-hearted optimization but works without - needing any change to surrounding code. -* Added option --ignore-case that produces a case independent lookup function. -* Bug fixes. - -New in 2.7.2: - -* Keywords may now be enclosed in double quotes; this permits the use of - '#', ',', space or NUL inside keywords. -* Bug fixes. - -New in 2.7.1: - -* Added option "-F" for gcc. - -New in 2.7: - -* gperf is now a stand-alone package, untied from libg++. -* Autoconfiguring. -* Removed the "-a" and "-g" options, extended the "-L" option instead. -* Removed the "-p" option, it is the default. -* Added long options ("--help", "--version" etc.). -* 8-bit cleanliness is now the default; use "-7" to get the old behaviour. -* Compiles with any C++ compiler. -* Numerous small improvements. - diff --git a/contrib/gperf/README b/contrib/gperf/README deleted file mode 100644 index 26173bfc2467..000000000000 --- a/contrib/gperf/README +++ /dev/null @@ -1,28 +0,0 @@ -This is GNU gperf. It is a program that generates perfect hash -functions for sets of key words. A perfect hash function is: - - A hash function and a data structure that allows - recognition of a key word in a set of words using - exactly 1 probe into the data structure. - -The doc/gperf.html file explains how the program works, the form of -the input, what options are available, and hints on choosing the best -options for particular key words set. - -See the file NEWS for a list of major changes in the current release. - -See the file INSTALL for compilation and installation instructions. - -Output from the GPERF program is used to recognize reserved words in -the GNU C, GNU C++, and GNU Pascal compilers, as well as with the GNU -indent program. - -For general documentation on the coding and usage standards -this distribution follows, see the GNU standards document -ftp://ftp.gnu.org/pub/gnu/standards.*, especially the 'Makefile -Conventions', 'Configuration', and 'User Interfaces' sections. - -Mail suggestions and bug reports to . When -reporting bugs, please include in the subject line the package name -and version (output of 'gperf --version') for which you found a problem. - diff --git a/contrib/gperf/aclocal.m4 b/contrib/gperf/aclocal.m4 deleted file mode 100644 index e834c09cb477..000000000000 --- a/contrib/gperf/aclocal.m4 +++ /dev/null @@ -1,69 +0,0 @@ -AC_PREREQ(2.12) - -AC_DEFUN(CL_PROG_INSTALL, -[dnl This is mostly copied from AC_PROG_INSTALL. -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# ./install, which can be erroneously created by make from ./install.sh. -AC_MSG_CHECKING(for a BSD compatible install) -if test -z "$INSTALL"; then -AC_CACHE_VAL(cl_cv_path_install, -[ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - for ac_prog in ginstall installbsd scoinst install; do - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - # OSF/1 installbsd also uses dspmsg, but is usable. - : - else - if test $ac_prog = installbsd && - grep src/bos $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX installbsd doesn't work without option "-g". - : - else - cl_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - fi - done - ;; - esac - done - IFS="$ac_save_ifs" - # As a last resort, use cp. - test -z "$cl_cv_path_install" && cl_cv_path_install="cp" -])dnl - INSTALL="$cl_cv_path_install" -fi -dnl We do special magic for INSTALL instead of AC_SUBST, to get -dnl relative paths right. -AC_MSG_RESULT($INSTALL) -AC_SUBST(INSTALL)dnl -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='$(INSTALL)' -AC_SUBST(INSTALL_PROGRAM)dnl -if test -z "$INSTALL_DATA"; then - case "$INSTALL" in - cp | */cp ) INSTALL_DATA='$(INSTALL)' ;; - * ) INSTALL_DATA='$(INSTALL) -m 644' ;; - esac -fi -AC_SUBST(INSTALL_DATA)dnl -]) - diff --git a/contrib/gperf/configure b/contrib/gperf/configure deleted file mode 100755 index 6a82f3dcbdc8..000000000000 --- a/contrib/gperf/configure +++ /dev/null @@ -1,2844 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61. -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -as_nl=' -' -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# CDPATH. -$as_unset CDPATH - - -if test "x$CONFIG_SHELL" = x; then - if (eval ":") 2>/dev/null; then - as_have_required=yes -else - as_have_required=no -fi - - if test $as_have_required = yes && (eval ": -(as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=\$LINENO - as_lineno_2=\$LINENO - test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && - test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -") 2> /dev/null; then - : -else - as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - case $as_dir in - /*) - for as_base in sh bash ksh sh5; do - as_candidate_shells="$as_candidate_shells $as_dir/$as_base" - done;; - esac -done -IFS=$as_save_IFS - - - for as_shell in $as_candidate_shells $SHELL; do - # Try only shells that exist, to save several forks. - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { ("$as_shell") 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -_ASEOF -}; then - CONFIG_SHELL=$as_shell - as_have_required=yes - if { "$as_shell" 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -(as_func_return () { - (exit $1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = "$1" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test $exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } - -_ASEOF -}; then - break -fi - -fi - - done - - if test "x$CONFIG_SHELL" != x; then - for as_var in BASH_ENV ENV - do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - - if test $as_have_required = no; then - echo This script requires a shell more modern than all the - echo shells that I found on your system. Please install a - echo modern shell, or manually run the script under such a - echo shell if you do have one. - { (exit 1); exit 1; } -fi - - -fi - -fi - - - -(eval "as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0") || { - echo No shell found that supports shell functions. - echo Please tell autoconf@gnu.org about your system, - echo including any error possibly output before this - echo message -} - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - -exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= - -ac_unique_file="doc/gperf.1" -ac_subst_vars='SHELL -PATH_SEPARATOR -PACKAGE_NAME -PACKAGE_TARNAME -PACKAGE_VERSION -PACKAGE_STRING -PACKAGE_BUGREPORT -exec_prefix -prefix -program_transform_name -bindir -sbindir -libexecdir -datarootdir -datadir -sysconfdir -sharedstatedir -localstatedir -includedir -oldincludedir -docdir -infodir -htmldir -dvidir -pdfdir -psdir -libdir -localedir -mandir -DEFS -ECHO_C -ECHO_N -ECHO_T -LIBS -build_alias -host_alias -target_alias -SET_MAKE -subdirs -LIBOBJS -LTLIBOBJS' -ac_subst_files='' - ac_precious_vars='build_alias -host_alias -target_alias' -ac_subdirs_all='lib src tests doc' - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=\$ac_optarg ;; - - -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } -fi - -# Be sure to have absolute directory names. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; } -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - { echo "$as_me: error: Working directory cannot be determined" >&2 - { (exit 1); exit 1; }; } -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - { echo "$as_me: error: pwd does not report name of working directory" >&2 - { (exit 1); exit 1; }; } - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$0" || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 - { (exit 1); exit 1; }; } - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -configure -generated by GNU Autoconf 2.61 - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi -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 $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; - 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - ac_configure_args="$ac_configure_args '$ac_arg'" - ;; - esac - done -done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -n "$CONFIG_SITE"; then - set x "$CONFIG_SITE" -elif test "x$prefix" != xNONE; then - set x "$prefix/share/config.site" "$prefix/etc/config.site" -else - set x "$ac_default_prefix/share/config.site" \ - "$ac_default_prefix/etc/config.site" -fi -shift -for ac_site_file -do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -fi - - - - - - - - - - - - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } -set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - SET_MAKE= -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - - - - -ac_aux_dir=$srcdir - -subdirs="$subdirs lib src tests doc" - - -extrasub="$extrasub"' -/@subdir@/{ -h -g -s/@subdir@/lib/ -p -g -s/@subdir@/src/ -p -g -s/@subdir@/tests/ -p -g -s/@subdir@/doc/ -p -d -} -' -ac_config_files="$ac_config_files Makefile" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${CONFIG_STATUS=./config.status} -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -as_nl=' -' -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# CDPATH. -$as_unset CDPATH - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 - -# Save the log message, to keep $[0] and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF -# Files that config.status was made for. -config_files="$ac_config_files" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.61, - with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - -Copyright (C) 2006 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - echo "$ac_cs_version"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) { echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; - - *) ac_config_targets="$ac_config_targets $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -if \$ac_cs_recheck; then - echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - CONFIG_SHELL=$SHELL - export CONFIG_SHELL - exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -# -# Set up the sed scripts for CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "$CONFIG_FILES"; then - -_ACEOF - - - -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -SHELL!$SHELL$ac_delim -PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim -PACKAGE_NAME!$PACKAGE_NAME$ac_delim -PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim -PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim -PACKAGE_STRING!$PACKAGE_STRING$ac_delim -PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim -exec_prefix!$exec_prefix$ac_delim -prefix!$prefix$ac_delim -program_transform_name!$program_transform_name$ac_delim -bindir!$bindir$ac_delim -sbindir!$sbindir$ac_delim -libexecdir!$libexecdir$ac_delim -datarootdir!$datarootdir$ac_delim -datadir!$datadir$ac_delim -sysconfdir!$sysconfdir$ac_delim -sharedstatedir!$sharedstatedir$ac_delim -localstatedir!$localstatedir$ac_delim -includedir!$includedir$ac_delim -oldincludedir!$oldincludedir$ac_delim -docdir!$docdir$ac_delim -infodir!$infodir$ac_delim -htmldir!$htmldir$ac_delim -dvidir!$dvidir$ac_delim -pdfdir!$pdfdir$ac_delim -psdir!$psdir$ac_delim -libdir!$libdir$ac_delim -localedir!$localedir$ac_delim -mandir!$mandir$ac_delim -DEFS!$DEFS$ac_delim -ECHO_C!$ECHO_C$ac_delim -ECHO_N!$ECHO_N$ac_delim -ECHO_T!$ECHO_T$ac_delim -LIBS!$LIBS$ac_delim -build_alias!$build_alias$ac_delim -host_alias!$host_alias$ac_delim -target_alias!$target_alias$ac_delim -SET_MAKE!$SET_MAKE$ac_delim -subdirs!$subdirs$ac_delim -LIBOBJS!$LIBOBJS$ac_delim -LTLIBOBJS!$LTLIBOBJS$ac_delim -_ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 41; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi - -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -:end -s/|#_!!_#|//g -CEOF$ac_eof -_ACEOF - - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF -fi # test -n "$CONFIG_FILES" - - -for ac_tag in :F $CONFIG_FILES -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 -echo "$as_me: error: Invalid tag $ac_tag." >&2;} - { (exit 1); exit 1; }; };; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -echo "$as_me: error: cannot find input file: $ac_f" >&2;} - { (exit 1); exit 1; }; };; - esac - ac_file_inputs="$ac_file_inputs $ac_f" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input="Generated from "`IFS=: - echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - fi - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin";; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir="$ac_dir" - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= - -case `sed -n '/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p -' $ac_file_inputs` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s&@configure_input@&$configure_input&;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -$ac_datarootdir_hack -" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out"; rm -f "$tmp/out";; - *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; - esac - ;; - - - - esac - -done # for ac_tag - - -{ (exit 0); exit 0; } -_ACEOF -chmod +x $CONFIG_STATUS -ac_clean_files=$ac_clean_files_save - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } -fi - -# -# CONFIG_SUBDIRS section. -# -if test "$no_recursion" != yes; then - - # Remove --cache-file and --srcdir arguments so they do not pile up. - ac_sub_configure_args= - ac_prev= - eval "set x $ac_configure_args" - shift - for ac_arg - do - if test -n "$ac_prev"; then - ac_prev= - continue - fi - case $ac_arg in - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ - | --c=*) - ;; - --config-cache | -C) - ;; - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - ;; - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - ;; - *) - case $ac_arg in - *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - ac_sub_configure_args="$ac_sub_configure_args '$ac_arg'" ;; - esac - done - - # Always prepend --prefix to ensure using the same prefix - # in subdir configurations. - ac_arg="--prefix=$prefix" - case $ac_arg in - *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" - - # Pass --silent - if test "$silent" = yes; then - ac_sub_configure_args="--silent $ac_sub_configure_args" - fi - - ac_popdir=`pwd` - for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue - - # Do not complain, so a configure script can configure whichever - # parts of a large source tree are present. - test -d "$srcdir/$ac_dir" || continue - - ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" - echo "$as_me:$LINENO: $ac_msg" >&5 - echo "$ac_msg" >&6 - { as_dir="$ac_dir" - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - cd "$ac_dir" - - # Check for guested configure; otherwise get Cygnus style configure. - if test -f "$ac_srcdir/configure.gnu"; then - ac_sub_configure=$ac_srcdir/configure.gnu - elif test -f "$ac_srcdir/configure"; then - ac_sub_configure=$ac_srcdir/configure - elif test -f "$ac_srcdir/configure.in"; then - # This should be Cygnus configure. - ac_sub_configure=$ac_aux_dir/configure - else - { echo "$as_me:$LINENO: WARNING: no configuration information is in $ac_dir" >&5 -echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} - ac_sub_configure= - fi - - # The recursion is here. - if test -n "$ac_sub_configure"; then - # Make the cache file name correct relative to the subdirectory. - case $cache_file in - [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; - *) # Relative name. - ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; - esac - - { echo "$as_me:$LINENO: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 -echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} - # The eval makes quoting arguments work. - eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ - --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || - { { echo "$as_me:$LINENO: error: $ac_sub_configure failed for $ac_dir" >&5 -echo "$as_me: error: $ac_sub_configure failed for $ac_dir" >&2;} - { (exit 1); exit 1; }; } - fi - - cd "$ac_popdir" - done -fi - diff --git a/contrib/gperf/configure.ac b/contrib/gperf/configure.ac deleted file mode 100644 index afcb112995a5..000000000000 --- a/contrib/gperf/configure.ac +++ /dev/null @@ -1,55 +0,0 @@ -dnl autoconf configuration for gperf - -dnl Copyright (C) 1998, 2002, 2003, 2005-2007 Free Software Foundation, Inc. -dnl Written by Douglas C. Schmidt -dnl and Bruno Haible . -dnl -dnl This file is part of GNU GPERF. -dnl -dnl GNU GPERF is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 2, or (at your option) -dnl any later version. -dnl -dnl GNU GPERF is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program; see the file COPYING. -dnl If not, write to the Free Software Foundation, Inc., -dnl 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -AC_PREREQ([2.60]) -AC_INIT(doc/gperf.1) -AC_PROG_MAKE_SET -AC_OBJEXT -AC_EXEEXT - -dnl An autoconf-2.52 bug: AC_CONFIG_SUBDIRS requires AC_CONFIG_AUX_DIR_DEFAULT. -ac_aux_dir=$srcdir -AC_PROVIDE([AC_CONFIG_AUX_DIR_DEFAULT]) -AC_CONFIG_SUBDIRS(lib src tests doc) - -dnl This piece of sed script replaces every line containing '@subdir@' -dnl by several consecutive lines, each referencing one subdir. -extrasub="$extrasub"' -/@subdir@/{ -h -g -s/@subdir@/lib/ -p -g -s/@subdir@/src/ -p -g -s/@subdir@/tests/ -p -g -s/@subdir@/doc/ -p -d -} -' -AC_OUTPUT(Makefile) diff --git a/contrib/gperf/doc/Makefile.in b/contrib/gperf/doc/Makefile.in deleted file mode 100644 index e68bc632ee18..000000000000 --- a/contrib/gperf/doc/Makefile.in +++ /dev/null @@ -1,153 +0,0 @@ -# Makefile for gperf/doc - -# Copyright (C) 1998, 2000, 2002-2003, 2007 Free Software Foundation, Inc. -# Written by Douglas C. Schmidt -# and Bruno Haible . -# -# This file is part of GNU GPERF. -# -# GNU GPERF is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU GPERF is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; see the file COPYING. -# If not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#### Start of system configuration section. #### - -# Directories used by "make": -srcdir = @srcdir@ - -# Directories used by "make install": -prefix = @prefix@ -local_prefix = /usr/local -exec_prefix = @exec_prefix@ -datarootdir = @datarootdir@ -datadir = @datadir@ -infodir = @infodir@ -mandir = @mandir@ -man1dir = $(mandir)/man1 -docdir = @docdir@ -dvidir = @dvidir@ -psdir = @psdir@ -pdfdir = @pdfdir@ -htmldir = @htmldir@ - -# Programs used by "make": -RM = rm -f -@SET_MAKE@ - -# Programs used by "make" if you have changed the documentation files: -TEX = tex -TEXI2DVI = texi2dvi -DVIPS = dvips -D600 -TEXI2PDF = texi2pdf -MAKEINFO = LANG= LC_MESSAGES= LC_ALL= LANGUAGE= makeinfo -TEXI2HTML = texi2html - -# Programs used by "make install": -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -MKINSTALLDIRS = $(SHELL) $(srcdir)/../mkinstalldirs - -#### End of system configuration section. #### - -SHELL = /bin/sh - -VPATH = $(srcdir) - -all : info ps pdf html - - -info : $(srcdir)/gperf.info - -$(srcdir)/gperf.info : $(srcdir)/gperf.texi $(srcdir)/gpl.texinfo - cd $(srcdir) && $(MAKEINFO) --no-split gperf.texi - - -dvi : $(srcdir)/gperf.dvi - -$(srcdir)/gperf.dvi : $(srcdir)/gperf.texi $(srcdir)/gpl.texinfo - cd $(srcdir) && $(RM) gperf.aux gperf.toc gperf.cp gperf.fn gperf.ky gperf.pg gperf.tp gperf.vr gperf.log gperf.cps - cd $(srcdir) && $(TEXI2DVI) gperf.texi - cd $(srcdir) && $(RM) gperf.aux gperf.toc gperf.cp gperf.fn gperf.ky gperf.pg gperf.tp gperf.vr gperf.log gperf.cps - - -ps : $(srcdir)/gperf.ps - -$(srcdir)/gperf.ps : $(srcdir)/gperf.dvi - $(DVIPS) -o $@ $(srcdir)/gperf.dvi - - -pdf : $(srcdir)/gperf.pdf - -$(srcdir)/gperf.pdf : $(srcdir)/gperf.texi $(srcdir)/gpl.texinfo - cd $(srcdir) && $(RM) gperf.aux gperf.toc gperf.cp gperf.fn gperf.ky gperf.pg gperf.tp gperf.vr gperf.log gperf.cps - cd $(srcdir) && $(TEXI2PDF) gperf.texi - cd $(srcdir) && $(RM) gperf.aux gperf.toc gperf.cp gperf.fn gperf.ky gperf.pg gperf.tp gperf.vr gperf.log gperf.cps - - -html : gperf.html gperf_toc.html - -gperf.html : $(srcdir)/gperf.texi $(srcdir)/gpl.texinfo - cd $(srcdir) && $(TEXI2HTML) -expandinfo -number -monolithic gperf.texi - -gperf_toc.html : $(srcdir)/gperf.texi $(srcdir)/gpl.texinfo - cd $(srcdir) && $(RM) gperf_*.html - cd $(srcdir) && $(TEXI2HTML) -expandinfo -number -split_chapter gperf.texi - - -install : all force - $(MKINSTALLDIRS) $(DESTDIR)$(infodir) - $(INSTALL_DATA) $(srcdir)/gperf.info $(DESTDIR)$(infodir)/gperf.info - $(MKINSTALLDIRS) $(DESTDIR)$(man1dir) - $(INSTALL_DATA) $(srcdir)/gperf.1 $(DESTDIR)$(man1dir)/gperf.1 -# $(MKINSTALLDIRS) $(DESTDIR)$(dvidir) -# $(INSTALL_DATA) $(srcdir)/gperf.dvi $(DESTDIR)$(dvidir)/gperf.dvi -# $(MKINSTALLDIRS) $(DESTDIR)$(psdir) -# $(INSTALL_DATA) $(srcdir)/gperf.ps $(DESTDIR)$(psdir)/gperf.ps -# $(MKINSTALLDIRS) $(DESTDIR)$(pdfdir) -# $(INSTALL_DATA) $(srcdir)/gperf.pdf $(DESTDIR)$(pdfdir)/gperf.pdf - $(MKINSTALLDIRS) $(DESTDIR)$(htmldir) - $(INSTALL_DATA) $(srcdir)/gperf.html $(DESTDIR)$(htmldir)/gperf.html - -installdirs : force - $(MKINSTALLDIRS) $(DESTDIR)$(infodir) - $(MKINSTALLDIRS) $(DESTDIR)$(man1dir) -# $(MKINSTALLDIRS) $(DESTDIR)$(dvidir) -# $(MKINSTALLDIRS) $(DESTDIR)$(psdir) -# $(MKINSTALLDIRS) $(DESTDIR)$(pdfdir) - $(MKINSTALLDIRS) $(DESTDIR)$(htmldir) - -uninstall : force - $(RM) $(DESTDIR)$(infodir)/gperf.info - $(RM) $(DESTDIR)$(man1dir)/gperf.1 -# $(RM) $(DESTDIR)$(dvidir)/gperf.dvi -# $(RM) $(DESTDIR)$(psdir)/gperf.ps -# $(RM) $(DESTDIR)$(pdfdir)/gperf.pdf - $(RM) $(DESTDIR)$(htmldir)/gperf.html - -check : all - -mostlyclean : clean - -clean : force - $(RM) *~ *.aux *.toc *.cp *.fn *.ky *.pg *.tp *.vr *.my *.log *.cps core - -distclean : clean - $(RM) config.status config.log config.cache Makefile - -maintainer-clean : distclean - $(RM) *.info *.dvi *.ps *.pdf *.html - -force : - diff --git a/contrib/gperf/doc/configure b/contrib/gperf/doc/configure deleted file mode 100755 index 7852e793c02d..000000000000 --- a/contrib/gperf/doc/configure +++ /dev/null @@ -1,2710 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61. -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -as_nl=' -' -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# CDPATH. -$as_unset CDPATH - - -if test "x$CONFIG_SHELL" = x; then - if (eval ":") 2>/dev/null; then - as_have_required=yes -else - as_have_required=no -fi - - if test $as_have_required = yes && (eval ": -(as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=\$LINENO - as_lineno_2=\$LINENO - test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && - test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -") 2> /dev/null; then - : -else - as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - case $as_dir in - /*) - for as_base in sh bash ksh sh5; do - as_candidate_shells="$as_candidate_shells $as_dir/$as_base" - done;; - esac -done -IFS=$as_save_IFS - - - for as_shell in $as_candidate_shells $SHELL; do - # Try only shells that exist, to save several forks. - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { ("$as_shell") 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -_ASEOF -}; then - CONFIG_SHELL=$as_shell - as_have_required=yes - if { "$as_shell" 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -(as_func_return () { - (exit $1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = "$1" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test $exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } - -_ASEOF -}; then - break -fi - -fi - - done - - if test "x$CONFIG_SHELL" != x; then - for as_var in BASH_ENV ENV - do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - - if test $as_have_required = no; then - echo This script requires a shell more modern than all the - echo shells that I found on your system. Please install a - echo modern shell, or manually run the script under such a - echo shell if you do have one. - { (exit 1); exit 1; } -fi - - -fi - -fi - - - -(eval "as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0") || { - echo No shell found that supports shell functions. - echo Please tell autoconf@gnu.org about your system, - echo including any error possibly output before this - echo message -} - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - -exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= - -ac_unique_file="gperf.1" -ac_subst_vars='SHELL -PATH_SEPARATOR -PACKAGE_NAME -PACKAGE_TARNAME -PACKAGE_VERSION -PACKAGE_STRING -PACKAGE_BUGREPORT -exec_prefix -prefix -program_transform_name -bindir -sbindir -libexecdir -datarootdir -datadir -sysconfdir -sharedstatedir -localstatedir -includedir -oldincludedir -docdir -infodir -htmldir -dvidir -pdfdir -psdir -libdir -localedir -mandir -DEFS -ECHO_C -ECHO_N -ECHO_T -LIBS -build_alias -host_alias -target_alias -PACKAGE -SET_MAKE -INSTALL -INSTALL_PROGRAM -INSTALL_DATA -LIBOBJS -LTLIBOBJS' -ac_subst_files='' - ac_precious_vars='build_alias -host_alias -target_alias' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=\$ac_optarg ;; - - -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } -fi - -# Be sure to have absolute directory names. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; } -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - { echo "$as_me: error: Working directory cannot be determined" >&2 - { (exit 1); exit 1; }; } -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - { echo "$as_me: error: pwd does not report name of working directory" >&2 - { (exit 1); exit 1; }; } - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$0" || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 - { (exit 1); exit 1; }; } - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -configure -generated by GNU Autoconf 2.61 - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi -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 $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; - 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - ac_configure_args="$ac_configure_args '$ac_arg'" - ;; - esac - done -done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -n "$CONFIG_SITE"; then - set x "$CONFIG_SITE" -elif test "x$prefix" != xNONE; then - set x "$prefix/share/config.site" "$prefix/etc/config.site" -else - set x "$ac_default_prefix/share/config.site" \ - "$ac_default_prefix/etc/config.site" -fi -shift -for ac_site_file -do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -fi - - - - - - - - - - - - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -PACKAGE=gperf - -{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } -set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - SET_MAKE= -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# ./install, which can be erroneously created by make from ./install.sh. -{ echo "$as_me:$LINENO: checking for a BSD compatible install" >&5 -echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6; } -if test -z "$INSTALL"; then -if test "${cl_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - for ac_prog in ginstall installbsd scoinst install; do - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - # OSF/1 installbsd also uses dspmsg, but is usable. - : - else - if test $ac_prog = installbsd && - grep src/bos $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX installbsd doesn't work without option "-g". - : - else - cl_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - fi - done - ;; - esac - done - IFS="$ac_save_ifs" - # As a last resort, use cp. - test -z "$cl_cv_path_install" && cl_cv_path_install="cp" - -fi - INSTALL="$cl_cv_path_install" -fi -{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6; } -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='$(INSTALL)' -if test -z "$INSTALL_DATA"; then - case "$INSTALL" in - cp | */cp ) INSTALL_DATA='$(INSTALL)' ;; - * ) INSTALL_DATA='$(INSTALL) -m 644' ;; - esac -fi - - ac_config_files="$ac_config_files Makefile" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${CONFIG_STATUS=./config.status} -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -as_nl=' -' -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# CDPATH. -$as_unset CDPATH - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 - -# Save the log message, to keep $[0] and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF -# Files that config.status was made for. -config_files="$ac_config_files" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.61, - with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - -Copyright (C) 2006 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - echo "$ac_cs_version"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) { echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; - - *) ac_config_targets="$ac_config_targets $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -if \$ac_cs_recheck; then - echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - CONFIG_SHELL=$SHELL - export CONFIG_SHELL - exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -# -# Set up the sed scripts for CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "$CONFIG_FILES"; then - -_ACEOF - - - -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -SHELL!$SHELL$ac_delim -PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim -PACKAGE_NAME!$PACKAGE_NAME$ac_delim -PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim -PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim -PACKAGE_STRING!$PACKAGE_STRING$ac_delim -PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim -exec_prefix!$exec_prefix$ac_delim -prefix!$prefix$ac_delim -program_transform_name!$program_transform_name$ac_delim -bindir!$bindir$ac_delim -sbindir!$sbindir$ac_delim -libexecdir!$libexecdir$ac_delim -datarootdir!$datarootdir$ac_delim -datadir!$datadir$ac_delim -sysconfdir!$sysconfdir$ac_delim -sharedstatedir!$sharedstatedir$ac_delim -localstatedir!$localstatedir$ac_delim -includedir!$includedir$ac_delim -oldincludedir!$oldincludedir$ac_delim -docdir!$docdir$ac_delim -infodir!$infodir$ac_delim -htmldir!$htmldir$ac_delim -dvidir!$dvidir$ac_delim -pdfdir!$pdfdir$ac_delim -psdir!$psdir$ac_delim -libdir!$libdir$ac_delim -localedir!$localedir$ac_delim -mandir!$mandir$ac_delim -DEFS!$DEFS$ac_delim -ECHO_C!$ECHO_C$ac_delim -ECHO_N!$ECHO_N$ac_delim -ECHO_T!$ECHO_T$ac_delim -LIBS!$LIBS$ac_delim -build_alias!$build_alias$ac_delim -host_alias!$host_alias$ac_delim -target_alias!$target_alias$ac_delim -PACKAGE!$PACKAGE$ac_delim -SET_MAKE!$SET_MAKE$ac_delim -INSTALL!$INSTALL$ac_delim -INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim -INSTALL_DATA!$INSTALL_DATA$ac_delim -LIBOBJS!$LIBOBJS$ac_delim -LTLIBOBJS!$LTLIBOBJS$ac_delim -_ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 44; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi - -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -:end -s/|#_!!_#|//g -CEOF$ac_eof -_ACEOF - - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF -fi # test -n "$CONFIG_FILES" - - -for ac_tag in :F $CONFIG_FILES -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 -echo "$as_me: error: Invalid tag $ac_tag." >&2;} - { (exit 1); exit 1; }; };; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -echo "$as_me: error: cannot find input file: $ac_f" >&2;} - { (exit 1); exit 1; }; };; - esac - ac_file_inputs="$ac_file_inputs $ac_f" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input="Generated from "`IFS=: - echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - fi - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin";; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir="$ac_dir" - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= - -case `sed -n '/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p -' $ac_file_inputs` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s&@configure_input@&$configure_input&;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -$ac_datarootdir_hack -" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out"; rm -f "$tmp/out";; - *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; - esac - ;; - - - - esac - -done # for ac_tag - - -{ (exit 0); exit 0; } -_ACEOF -chmod +x $CONFIG_STATUS -ac_clean_files=$ac_clean_files_save - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } -fi - diff --git a/contrib/gperf/doc/configure.ac b/contrib/gperf/doc/configure.ac deleted file mode 100644 index e6bfbfe0d01c..000000000000 --- a/contrib/gperf/doc/configure.ac +++ /dev/null @@ -1,37 +0,0 @@ -dnl autoconf configuration for gperf/doc - -dnl Copyright (C) 1998, 2000, 2002-2003, 2007 Free Software Foundation, Inc. -dnl Written by Douglas C. Schmidt -dnl and Bruno Haible . -dnl -dnl This file is part of GNU GPERF. -dnl -dnl GNU GPERF is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 2, or (at your option) -dnl any later version. -dnl -dnl GNU GPERF is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program; see the file COPYING. -dnl If not, write to the Free Software Foundation, Inc., -dnl 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -AC_PREREQ([2.60]) -AC_INIT(gperf.1) -PACKAGE=gperf -AC_SUBST(PACKAGE) -AC_PROG_MAKE_SET -dnl -dnl checks for programs -dnl -CL_PROG_INSTALL - dnl sets variables INSTALL, INSTALL_DATA, INSTALL_PROGRAM -dnl -dnl That's it. -dnl -AC_OUTPUT(Makefile) diff --git a/contrib/gperf/doc/gperf.1 b/contrib/gperf/doc/gperf.1 deleted file mode 100644 index 786604ef050c..000000000000 --- a/contrib/gperf/doc/gperf.1 +++ /dev/null @@ -1,216 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. -.TH GPERF "1" "May 2007" "GNU gperf 3.0.3" FSF -.SH NAME -gperf \- generate a perfect hash function from a key set -.SH SYNOPSIS -.B gperf -[\fIOPTION\fR]... [\fIINPUT-FILE\fR] -.SH DESCRIPTION -GNU 'gperf' generates perfect hash functions. -.PP -If a long option shows an argument as mandatory, then it is mandatory -for the equivalent short option also. -.SS "Output file location:" -.HP -\fB\-\-output\-file\fR=\fIFILE\fR Write output to specified file. -.PP -The results are written to standard output if no output file is specified -or if it is -. -.SS "Input file interpretation:" -.TP -\fB\-e\fR, \fB\-\-delimiters\fR=\fIDELIMITER\-LIST\fR -Allow user to provide a string containing delimiters -used to separate keywords from their attributes. -Default is ",". -.TP -\fB\-t\fR, \fB\-\-struct\-type\fR -Allows the user to include a structured type -declaration for generated code. Any text before %% -is considered part of the type declaration. Key -words and additional fields may follow this, one -group of fields per line. -.TP -\fB\-\-ignore\-case\fR -Consider upper and lower case ASCII characters as -equivalent. Note that locale dependent case mappings -are ignored. -.SS "Language for the output code:" -.TP -\fB\-L\fR, \fB\-\-language\fR=\fILANGUAGE\-NAME\fR -Generates code in the specified language. Languages -handled are currently C++, ANSI-C, C, and KR-C. The -default is C. -.SS "Details in the output code:" -.TP -\fB\-K\fR, \fB\-\-slot\-name\fR=\fINAME\fR -Select name of the keyword component in the keyword -structure. -.TP -\fB\-F\fR, \fB\-\-initializer\-suffix\fR=\fIINITIALIZERS\fR -Initializers for additional components in the keyword -structure. -.TP -\fB\-H\fR, \fB\-\-hash\-function\-name\fR=\fINAME\fR -Specify name of generated hash function. Default is -\&'hash'. -.TP -\fB\-N\fR, \fB\-\-lookup\-function\-name\fR=\fINAME\fR -Specify name of generated lookup function. Default -name is 'in_word_set'. -.TP -\fB\-Z\fR, \fB\-\-class\-name\fR=\fINAME\fR -Specify name of generated C++ class. Default name is -\&'Perfect_Hash'. -.TP -\fB\-7\fR, \fB\-\-seven\-bit\fR -Assume 7-bit characters. -.TP -\fB\-l\fR, \fB\-\-compare\-lengths\fR -Compare key lengths before trying a string -comparison. This is necessary if the keywords -contain NUL bytes. It also helps cut down on the -number of string comparisons made during the lookup. -.TP -\fB\-c\fR, \fB\-\-compare\-strncmp\fR -Generate comparison code using strncmp rather than -strcmp. -.TP -\fB\-C\fR, \fB\-\-readonly\-tables\fR -Make the contents of generated lookup tables -constant, i.e., readonly. -.TP -\fB\-E\fR, \fB\-\-enum\fR -Define constant values using an enum local to the -lookup function rather than with defines. -.TP -\fB\-I\fR, \fB\-\-includes\fR -Include the necessary system include file -at the beginning of the code. -.TP -\fB\-G\fR, \fB\-\-global\-table\fR -Generate the static table of keywords as a static -global variable, rather than hiding it inside of the -lookup function (which is the default behavior). -.TP -\fB\-P\fR, \fB\-\-pic\fR -Optimize the generated table for inclusion in shared -libraries. This reduces the startup time of programs -using a shared library containing the generated code. -.TP -\fB\-Q\fR, \fB\-\-string\-pool\-name\fR=\fINAME\fR -Specify name of string pool generated by option \fB\-\-pic\fR. -Default name is 'stringpool'. -.TP -\fB\-\-null\-strings\fR -Use NULL strings instead of empty strings for empty -keyword table entries. -.TP -\fB\-W\fR, \fB\-\-word\-array\-name\fR=\fINAME\fR -Specify name of word list array. Default name is -\&'wordlist'. -.TP -\fB\-\-length\-table\-name\fR=\fINAME\fR -Specify name of length table array. Default name is -\&'lengthtable'. -.TP -\fB\-S\fR, \fB\-\-switch\fR=\fICOUNT\fR -Causes the generated C code to use a switch -statement scheme, rather than an array lookup table. -This can lead to a reduction in both time and space -requirements for some keyfiles. The COUNT argument -determines how many switch statements are generated. -A value of 1 generates 1 switch containing all the -elements, a value of 2 generates 2 tables with 1/2 -the elements in each table, etc. If COUNT is very -large, say 1000000, the generated C code does a -binary search. -.TP -\fB\-T\fR, \fB\-\-omit\-struct\-type\fR -Prevents the transfer of the type declaration to the -output file. Use this option if the type is already -defined elsewhere. -.SS "Algorithm employed by gperf:" -.TP -\fB\-k\fR, \fB\-\-key\-positions\fR=\fIKEYS\fR -Select the key positions used in the hash function. -The allowable choices range between 1-255, inclusive. -The positions are separated by commas, ranges may be -used, and key positions may occur in any order. -Also, the meta-character '*' causes the generated -hash function to consider ALL key positions, and $ -indicates the "final character" of a key, e.g., -$,1,2,4,6-10. -.TP -\fB\-D\fR, \fB\-\-duplicates\fR -Handle keywords that hash to duplicate values. This -is useful for certain highly redundant keyword sets. -.TP -\fB\-m\fR, \fB\-\-multiple\-iterations\fR=\fIITERATIONS\fR -Perform multiple choices of the \fB\-i\fR and \fB\-j\fR values, -and choose the best results. This increases the -running time by a factor of ITERATIONS but does a -good job minimizing the generated table size. -.TP -\fB\-i\fR, \fB\-\-initial\-asso\fR=\fIN\fR -Provide an initial value for the associate values -array. Default is 0. Setting this value larger helps -inflate the size of the final table. -.TP -\fB\-j\fR, \fB\-\-jump\fR=\fIJUMP\-VALUE\fR -Affects the "jump value", i.e., how far to advance -the associated character value upon collisions. Must -be an odd number, default is 5. -.TP -\fB\-n\fR, \fB\-\-no\-strlen\fR -Do not include the length of the keyword when -computing the hash function. -.TP -\fB\-r\fR, \fB\-\-random\fR -Utilizes randomness to initialize the associated -values table. -.TP -\fB\-s\fR, \fB\-\-size\-multiple\fR=\fIN\fR -Affects the size of the generated hash table. The -numeric argument N indicates "how many times larger -or smaller" the associated value range should be, -in relationship to the number of keys, e.g. a value -of 3 means "allow the maximum associated value to -be about 3 times larger than the number of input -keys". Conversely, a value of 1/3 means "make the -maximum associated value about 3 times smaller than -the number of input keys". A larger table should -decrease the time required for an unsuccessful -search, at the expense of extra table space. Default -value is 1. -.SS "Informative output:" -.TP -\fB\-h\fR, \fB\-\-help\fR -Print this message. -.TP -\fB\-v\fR, \fB\-\-version\fR -Print the gperf version number. -.TP -\fB\-d\fR, \fB\-\-debug\fR -Enables the debugging option (produces verbose -output to the standard error). -.SH AUTHOR -Written by Douglas C. Schmidt and Bruno Haible. -.SH "REPORTING BUGS" -Report bugs to . -.SH COPYRIGHT -Copyright \(co 1989-1998, 2000-2004, 2006-2007 Free Software Foundation, Inc. -.br -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -.SH "SEE ALSO" -The full documentation for -.B gperf -is maintained as a Texinfo manual. If the -.B info -and -.B gperf -programs are properly installed at your site, the command -.IP -.B info gperf -.PP -should give you access to the complete manual. diff --git a/contrib/gperf/doc/gperf.7 b/contrib/gperf/doc/gperf.7 deleted file mode 100644 index b44dc3b20e8d..000000000000 --- a/contrib/gperf/doc/gperf.7 +++ /dev/null @@ -1,1892 +0,0 @@ -.Dd 2015-03-02 -.Dt GPERF 7 -.Os -.Sh NAME -.Nm gperf -.Nd Perfect Hash Function Generator -.Sh Introduction -This manual documents the GNU -.Li gperf -perfect hash function generator utility, focusing on its features and how -to use them, and how to report bugs. -.Pp -.Sh GNU GENERAL PUBLIC LICENSE -.Bd -filled -offset indent -Copyright \(co 1989, 1991 Free Software Foundation, Inc., 59 Temple Place, Suite -330, Boston, MA 02111-1307, USA. -.Pp -Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. -.Ed -.Pp -.Ss Preamble -The licenses for most software are designed to take away your freedom to share -and change it. By contrast, the GNU General Public License is intended to -guarantee your freedom to share and change free software---to make sure the -software is free for all its users. This General Public License applies to -most of the Free Software Foundation's software and to any other program whose -authors commit to using it. (Some other Free Software Foundation software -is covered by the GNU Library General Public License instead.) You can apply -it to your programs, too. -.Pp -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 this service 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. -.Pp -To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These restrictions -translate to certain responsibilities for you if you distribute copies of -the software, or if you modify it. -.Pp -For example, if you distribute copies of such a program, whether gratis or -for a fee, you must give the recipients all the rights that you have. 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. -.Pp -We protect your rights with two steps: (1) copyright the software, and (2) -offer you this license which gives you legal permission to copy, distribute -and/or modify the software. -.Pp -Also, for each author's protection and ours, we want to make certain that -everyone understands that there is no warranty for this free software. If -the software is modified by someone else and passed on, we want its recipients -to know that what they have is not the original, so that any problems introduced -by others will not reflect on the original authors' reputations. -.Pp -Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that redistributors of a free program will individually -obtain patent licenses, in effect making the program proprietary. To prevent -this, we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. -.Pp -The precise terms and conditions for copying, distribution and modification -follow. -.Pp -.Bl -enum -.It -This License applies to any program or other work which contains a notice -placed by the copyright holder saying it may be distributed under the terms -of this General Public License. The \(lqProgram\(rq, below, refers to any such program -or work, and a \(lqwork based on the Program\(rq means either the Program or any derivative -work under copyright law: that is to say, a work containing the Program or -a portion of it, either verbatim or with modifications and/or translated into -another language. (Hereinafter, translation is included without limitation -in the term \(lqmodification\(rq.) Each licensee is addressed as \(lqyou\(rq. -.Pp -Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running the Program -is not restricted, and the output from the Program is covered only if its -contents constitute a work based on the Program (independent of having been -made by running the Program). Whether that is true depends on what the Program -does. -.Pp -.It -You may copy and distribute 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 and disclaimer of warranty; -keep intact all the notices that refer to this License and to the absence -of any warranty; and give any other recipients of the Program a copy of this -License along with the Program. -.Pp -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. -.Pp -.It -You may modify your copy or copies of the Program or any portion of it, thus -forming a work based on the Program, and copy and distribute such modifications -or work under the terms of Section 1 above, provided that you also meet all -of these conditions: -.Pp -.Bl -enum -.It -You must cause the modified files to carry prominent notices stating that -you changed the files and the date of any change. -.Pp -.It -You must cause any work that you distribute or publish, that in whole or in -part contains or is derived from the Program or any part thereof, to be licensed -as a whole at no charge to all third parties under the terms of this License. -.Pp -.It -If the modified program normally reads commands interactively when run, you -must cause it, when started running for such interactive use in the most ordinary -way, to print or display an announcement including an appropriate copyright -notice and a notice that there is no warranty (or else, saying that you provide -a warranty) and that users may redistribute the program under these conditions, -and telling the user how to view a copy of this License. (Exception: if the -Program itself is interactive but does not normally print such an announcement, -your work based on the Program is not required to print an announcement.) -.El -.Pp -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Program, 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 Program, 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. -.Pp -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 Program. -.Pp -In addition, mere aggregation of another work not based on the Program with -the Program (or with a work based on the Program) on a volume of a storage -or distribution medium does not bring the other work under the scope of this -License. -.Pp -.It -You may copy and distribute the Program (or a work based on it, under Section -2) in object code or executable form under the terms of Sections 1 and 2 above -provided that you also do one of the following: -.Pp -.Bl -enum -.It -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; or, -.Pp -.It -Accompany it with a written offer, valid for at least three years, to give -any third party, for a charge no more than your cost of physically performing -source distribution, a complete machine-readable copy of the corresponding -source code, to be distributed under the terms of Sections 1 and 2 above on -a medium customarily used for software interchange; or, -.Pp -.It -Accompany it with the information you received as to the offer to distribute -corresponding source code. (This alternative is allowed only for noncommercial -distribution and only if you received the program in object code or executable -form with such an offer, in accord with Subsection b above.) -.El -.Pp -The source code for a work means the preferred form of the work for making -modifications to it. For an executable work, 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 executable. However, as a special exception, the source code 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. -.Pp -If distribution of executable or 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 counts as distribution of the source code, -even though third parties are not compelled to copy the source along with -the object code. -.Pp -.It -You may not copy, modify, sublicense, or distribute the Program except as -expressly provided under this License. Any attempt otherwise to copy, modify, -sublicense or distribute the Program 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. -.Pp -.It -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 Program -or its derivative works. These actions are prohibited by law if you do not -accept this License. Therefore, by modifying or distributing the Program (or -any work based on the Program), you indicate your acceptance of this License -to do so, and all its terms and conditions for copying, distributing or modifying -the Program or works based on it. -.Pp -.It -Each time you redistribute the Program (or any work based on the Program), -the recipient automatically receives a license from the original licensor -to copy, distribute or modify the Program 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 to this License. -.Pp -.It -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 Program at all. For example, if a -patent license would not permit royalty-free redistribution of the Program -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 Program. -.Pp -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. -.Pp -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. -.Pp -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. -.Pp -.It -If the distribution and/or use of the Program is restricted in certain countries -either by patents or by copyrighted interfaces, the original copyright holder -who places the Program 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. -.Pp -.It -The Free Software Foundation may publish revised and/or new versions of the -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. -.Pp -Each version is given a distinguishing version number. If the Program specifies -a version number of this License which applies to it and \(lqany later version\(rq, -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 -Program does not specify a version number of this License, you may choose -any version ever published by the Free Software Foundation. -.Pp -.It -If you wish to incorporate parts of the Program into other free programs whose -distribution conditions are different, 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. -.Pp -.It -BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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 -\(lqAS IS\(rq 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. -.Pp -.It -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 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. -.El -.Pp -.Ss 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. -.Pp -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 convey the exclusion -of warranty; and each file should have at least the \(lqcopyright\(rq line and a pointer -to where the full notice is found. -.Pp -.Bd -literal -offset indent -one line to give the program's name and an 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 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -.Ed -.Pp -Also add information on how to contact you by electronic and paper mail. -.Pp -If the program is interactive, make it output a short notice like this when -it starts in an interactive mode: -.Pp -.Bd -literal -offset indent -Gnomovision version 69, Copyright (C) year name of author -Gnomovision 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. -.Ed -.Pp -The hypothetical commands -.Li show w -and -.Li show c -should show the appropriate parts of the General Public License. Of course, -the commands you use may be called something other than -.Li show w -and -.Li show c -; they could even be mouse-clicks or menu items---whatever suits your program. -.Pp -You should also get your employer (if you work as a programmer) or your school, -if any, to sign a \(lqcopyright disclaimer\(rq for the program, if necessary. Here -is a sample; alter the names: -.Pp -.Bd -literal -offset indent - -Yoyodyne, Inc., hereby disclaims all copyright -interest in the program `Gnomovision' -(which makes passes at compilers) written -by James Hacker. - -signature of Ty Coon, 1 April 1989 -Ty Coon, President of Vice - -.Ed -.Pp -This 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 Library General Public License -instead of this License. -.Pp -.Sh Contributors to GNU Li gperf Utility -.Bl -bullet -.It -The GNU -.Li gperf -perfect hash function generator utility was written in GNU C++ by Douglas -C. Schmidt. The general idea for the perfect hash function generator was inspired -by Keith Bostic's algorithm written in C, and distributed to net.sources around -1984. The current program is a heavily modified, enhanced, and extended implementation -of Keith's basic idea, created at the University of California, Irvine. Bugs, -patches, and suggestions should be reported to -.Li . -.Pp -.It -Special thanks is extended to Michael Tiemann and Doug Lea, for providing -a useful compiler, and for giving me a forum to exhibit my creation. -.Pp -In addition, Adam de Boor and Nels Olson provided many tips and insights that -greatly helped improve the quality and functionality of -.Li gperf . -.Pp -.It -Bruno Haible enhanced and optimized the search algorithm. He also rewrote -the input routines and the output routines for better reliability, and added -a testsuite. -.El -.Pp -.Sh Introduction -.Li gperf -is a perfect hash function generator written in C++. It transforms an -.Va n -element user-specified keyword set -.Va W -into a perfect hash function -.Va F . -.Va F -uniquely maps keywords in -.Va W -onto the range 0.. -.Va k , -where -.Va k ->= -.Va n-1 . -If -.Va k -= -.Va n-1 -then -.Va F -is a -.Em minimal -perfect hash function. -.Li gperf -generates a 0.. -.Va k -element static lookup table and a pair of C functions. These functions determine -whether a given character string -.Va s -occurs in -.Va W , -using at most one probe into the lookup table. -.Pp -.Li gperf -currently generates the reserved keyword recognizer for lexical analyzers -in several production and research compilers and language processing tools, -including GNU C, GNU C++, GNU Java, GNU Pascal, GNU Modula 3, and GNU indent. -Complete C++ source code for -.Li gperf -is available from -.Li http://ftp.gnu.org/pub/gnu/gperf/ . -A paper describing -.Li gperf -\&'s design and implementation in greater detail is available in the Second -USENIX C++ Conference proceedings or from -.Li http://www.cs.wustl.edu/~schmidt/resume.html . -.Pp -.Sh Static search structures and GNU Li gperf -A -.Em static search structure -is an Abstract Data Type with certain fundamental operations, e.g., -.Em initialize , -.Em insert , -and -.Em retrieve . -Conceptually, all insertions occur before any retrievals. In practice, -.Li gperf -generates a -.Em static -array containing search set keywords and any associated attributes specified -by the user. Thus, there is essentially no execution-time cost for the insertions. -It is a useful data structure for representing -.Em static search sets . -Static search sets occur frequently in software system applications. Typical -static search sets include compiler reserved words, assembler instruction -opcodes, and built-in shell interpreter commands. Search set members, called -.Em keywords , -are inserted into the structure only once, usually during program initialization, -and are not generally modified at run-time. -.Pp -Numerous static search structure implementations exist, e.g., arrays, linked -lists, binary search trees, digital search tries, and hash tables. Different -approaches offer trade-offs between space utilization and search time efficiency. -For example, an -.Va n -element sorted array is space efficient, though the average-case time complexity -for retrieval operations using binary search is proportional to log -.Va n . -Conversely, hash table implementations often locate a table entry in constant -time, but typically impose additional memory overhead and exhibit poor worst -case performance. -.Pp -.Em Minimal perfect hash functions -provide an optimal solution for a particular class of static search sets. -A minimal perfect hash function is defined by two properties: -.Pp -.Bl -bullet -.It -It allows keyword recognition in a static search set using at most -.Em one -probe into the hash table. This represents the \(lqperfect\(rq property. -.It -The actual memory allocated to store the keywords is precisely large enough -for the keyword set, and -.Em no larger . -This is the \(lqminimal\(rq property. -.El -.Pp -For most applications it is far easier to generate -.Em perfect -hash functions than -.Em minimal perfect -hash functions. Moreover, non-minimal perfect hash functions frequently execute -faster than minimal ones in practice. This phenomena occurs since searching -a sparse keyword table increases the probability of locating a \(lqnull\(rq entry, -thereby reducing string comparisons. -.Li gperf -\&'s default behavior generates -.Em near-minimal -perfect hash functions for keyword sets. However, -.Li gperf -provides many options that permit user control over the degree of minimality -and perfection. -.Pp -Static search sets often exhibit relative stability over time. For example, -Ada's 63 reserved words have remained constant for nearly a decade. It is -therefore frequently worthwhile to expend concerted effort building an optimal -search structure -.Em once , -if it subsequently receives heavy use multiple times. -.Li gperf -removes the drudgery associated with constructing time- and space-efficient -search structures by hand. It has proven a useful and practical tool for serious -programming projects. Output from -.Li gperf -is currently used in several production and research compilers, including -GNU C, GNU C++, GNU Java, GNU Pascal, and GNU Modula 3. The latter two compilers -are not yet part of the official GNU distribution. Each compiler utilizes -.Li gperf -to automatically generate static search structures that efficiently identify -their respective reserved keywords. -.Pp -.Sh High-Level Description of GNU Li gperf -The perfect hash function generator -.Li gperf -reads a set of \(lqkeywords\(rq from an input file (or from the standard input by -default). It attempts to derive a perfect hashing function that recognizes -a member of the -.Em static keyword set -with at most a single probe into the lookup table. If -.Li gperf -succeeds in generating such a function it produces a pair of C source code -routines that perform hashing and table lookup recognition. All generated -C code is directed to the standard output. Command-line options described -below allow you to modify the input and output format to -.Li gperf . -.Pp -By default, -.Li gperf -attempts to produce time-efficient code, with less emphasis on efficient space -utilization. However, several options exist that permit trading-off execution -time for storage space and vice versa. In particular, expanding the generated -table size produces a sparse search structure, generally yielding faster searches. -Conversely, you can direct -.Li gperf -to utilize a C -.Li switch -statement scheme that minimizes data space storage size. Furthermore, using -a C -.Li switch -may actually speed up the keyword retrieval time somewhat. Actual results -depend on your C compiler, of course. -.Pp -In general, -.Li gperf -assigns values to the bytes it is using for hashing until some set of values -gives each keyword a unique value. A helpful heuristic is that the larger -the hash value range, the easier it is for -.Li gperf -to find and generate a perfect hash function. Experimentation is the key to -getting the most from -.Li gperf . -.Pp -.Ss Input Format to Li gperf -You can control the input file format by varying certain command-line arguments, -in particular the -.Li -t -option. The input's appearance is similar to GNU utilities -.Li flex -and -.Li bison -(or UNIX utilities -.Li lex -and -.Li yacc ) . -Here's an outline of the general format: -.Pp -.Bd -literal -offset indent - -declarations -%% -keywords -%% -functions - -.Ed -.Pp -.Em Unlike -.Li flex -or -.Li bison , -the declarations section and the functions section are optional. The following -sections describe the input format for each section. -.Pp -It is possible to omit the declaration section entirely, if the -.Li -t -option is not given. In this case the input file begins directly with the -first keyword line, e.g.: -.Pp -.Bd -literal -offset indent - -january -february -march -april -\&... - -.Ed -.Pp -.Em Declarations -.Pp -The keyword input file optionally contains a section for including arbitrary -C declarations and definitions, -.Li gperf -declarations that act like command-line options, as well as for providing -a user-supplied -.Li struct . -.Pp -.No User-supplied Li struct -.Pp -If the -.Li -t -option (or, equivalently, the -.Li %struct-type -declaration) -.Em is -enabled, you -.Em must -provide a C -.Li struct -as the last component in the declaration section from the input file. The -first field in this struct must be of type -.Li char * -or -.Li const char * -if the -.Li -P -option is not given, or of type -.Li int -if the option -.Li -P -(or, equivalently, the -.Li %pic -declaration) is enabled. This first field must be called -.Li name , -although it is possible to modify its name with the -.Li -K -option (or, equivalently, the -.Li %define slot-name -declaration) described below. -.Pp -Here is a simple example, using months of the year and their attributes as -input: -.Pp -.Bd -literal -offset indent - -struct month { char *name; int number; int days; int leap_days; }; -%% -january, 1, 31, 31 -february, 2, 28, 29 -march, 3, 31, 31 -april, 4, 30, 30 -may, 5, 31, 31 -june, 6, 30, 30 -july, 7, 31, 31 -august, 8, 31, 31 -september, 9, 30, 30 -october, 10, 31, 31 -november, 11, 30, 30 -december, 12, 31, 31 - -.Ed -.Pp -Separating the -.Li struct -declaration from the list of keywords and other fields are a pair of consecutive -percent signs, -.Li %% , -appearing left justified in the first column, as in the UNIX utility -.Li lex . -.Pp -If the -.Li struct -has already been declared in an include file, it can be mentioned in an abbreviated -form, like this: -.Pp -.Bd -literal -offset indent - -struct month; -%% -january, 1, 31, 31 -\&... - -.Ed -.Pp -.No Gperf Declarations -.Pp -The declaration section can contain -.Li gperf -declarations. They influence the way -.Li gperf -works, like command line options do. In fact, every such declaration is equivalent -to a command line option. There are three forms of declarations: -.Pp -.Bl -enum -.It -Declarations without argument, like -.Li %compare-lengths . -.Pp -.It -Declarations with an argument, like -.Li %switch= Va count . -.Pp -.It -Declarations of names of entities in the output file, like -.Li %define lookup-function-name Va name . -.El -.Pp -When a declaration is given both in the input file and as a command line option, -the command-line option's value prevails. -.Pp -The following -.Li gperf -declarations are available. -.Pp -.Bl -tag -width Ds -.It %delimiters= Va delimiter-list -Allows you to provide a string containing delimiters used to separate keywords -from their attributes. The default is ",". This option is essential if you -want to use keywords that have embedded commas or newlines. -.Pp -.It %struct-type -Allows you to include a -.Li struct -type declaration for generated code; see above for an example. -.Pp -.It %ignore-case -Consider upper and lower case ASCII characters as equivalent. The string comparison -will use a case insignificant character comparison. Note that locale dependent -case mappings are ignored. -.Pp -.It %language= Va language-name -Instructs -.Li gperf -to generate code in the language specified by the option's argument. Languages -handled are currently: -.Pp -.Bl -tag -width Ds -.It KR-C -Old-style K&R C. This language is understood by old-style C compilers and -ANSI C compilers, but ANSI C compilers may flag warnings (or even errors) -because of lacking -.Li const . -.Pp -.It C -Common C. This language is understood by ANSI C compilers, and also by old-style -C compilers, provided that you -.Li #define const -to empty for compilers which don't know about this keyword. -.Pp -.It ANSI-C -ANSI C. This language is understood by ANSI C compilers and C++ compilers. -.Pp -.It C++ -C++. This language is understood by C++ compilers. -.El -.Pp -The default is C. -.Pp -.It %define slot-name Va name -This declaration is only useful when option -.Li -t -(or, equivalently, the -.Li %struct-type -declaration) has been given. By default, the program assumes the structure -component identifier for the keyword is -.Li name . -This option allows an arbitrary choice of identifier for this component, although -it still must occur as the first field in your supplied -.Li struct . -.Pp -.It %define initializer-suffix Va initializers -This declaration is only useful when option -.Li -t -(or, equivalently, the -.Li %struct-type -declaration) has been given. It permits to specify initializers for the structure -members following -.Va slot-name -in empty hash table entries. The list of initializers should start with a -comma. By default, the emitted code will zero-initialize structure members -following -.Va slot-name . -.Pp -.It %define hash-function-name Va name -Allows you to specify the name for the generated hash function. Default name -is -.Li hash . -This option permits the use of two hash tables in the same file. -.Pp -.It %define lookup-function-name Va name -Allows you to specify the name for the generated lookup function. Default -name is -.Li in_word_set . -This option permits multiple generated hash functions to be used in the same -application. -.Pp -.It %define class-name Va name -This option is only useful when option -.Li -L C++ -(or, equivalently, the -.Li %language=C++ -declaration) has been given. It allows you to specify the name of generated -C++ class. Default name is -.Li Perfect_Hash . -.Pp -.It %7bit -This option specifies that all strings that will be passed as arguments to -the generated hash function and the generated lookup function will solely -consist of 7-bit ASCII characters (bytes in the range 0..127). (Note that -the ANSI C functions -.Li isalnum -and -.Li isgraph -do -.Em not -guarantee that a byte is in this range. Only an explicit test like -.Li c >= 'A' && c <= 'Z' -guarantees this.) -.Pp -.It %compare-lengths -Compare keyword lengths before trying a string comparison. This option is -mandatory for binary comparisons (see Section -.Dq Binary Strings ) . -It also might cut down on the number of string comparisons made during the -lookup, since keywords with different lengths are never compared via -.Li strcmp . -However, using -.Li %compare-lengths -might greatly increase the size of the generated C code if the lookup table -range is large (which implies that the switch option -.Li -S -or -.Li %switch -is not enabled), since the length table contains as many elements as there -are entries in the lookup table. -.Pp -.It %compare-strncmp -Generates C code that uses the -.Li strncmp -function to perform string comparisons. The default action is to use -.Li strcmp . -.Pp -.It %readonly-tables -Makes the contents of all generated lookup tables constant, i.e., \(lqreadonly\(rq. -Many compilers can generate more efficient code for this by putting the tables -in readonly memory. -.Pp -.It %enum -Define constant values using an enum local to the lookup function rather than -with #defines. This also means that different lookup functions can reside -in the same file. Thanks to James Clark -.Li . -.Pp -.It %includes -Include the necessary system include file, -.Li , -at the beginning of the code. By default, this is not done; the user must -include this header file himself to allow compilation of the code. -.Pp -.It %global-table -Generate the static table of keywords as a static global variable, rather -than hiding it inside of the lookup function (which is the default behavior). -.Pp -.It %pic -Optimize the generated table for inclusion in shared libraries. This reduces -the startup time of programs using a shared library containing the generated -code. If the -.Li %struct-type -declaration (or, equivalently, the option -.Li -t ) -is also given, the first field of the user-defined struct must be of type -.Li int , -not -.Li char * , -because it will contain offsets into the string pool instead of actual strings. -To convert such an offset to a string, you can use the expression -.Li stringpool + Va o , -where -.Va o -is the offset. The string pool name can be changed through the -.Li %define string-pool-name -declaration. -.Pp -.It %define string-pool-name Va name -Allows you to specify the name of the generated string pool created by the -declaration -.Li %pic -(or, equivalently, the option -.Li -P ) . -The default name is -.Li stringpool . -This declaration permits the use of two hash tables in the same file, with -.Li %pic -and even when the -.Li %global-table -declaration (or, equivalently, the option -.Li -G ) -is given. -.Pp -.It %null-strings -Use NULL strings instead of empty strings for empty keyword table entries. -This reduces the startup time of programs using a shared library containing -the generated code (but not as much as the declaration -.Li %pic ) , -at the expense of one more test-and-branch instruction at run time. -.Pp -.It %define word-array-name Va name -Allows you to specify the name for the generated array containing the hash -table. Default name is -.Li wordlist . -This option permits the use of two hash tables in the same file, even when -the option -.Li -G -(or, equivalently, the -.Li %global-table -declaration) is given. -.Pp -.It %define length-table-name Va name -Allows you to specify the name for the generated array containing the length -table. Default name is -.Li lengthtable . -This option permits the use of two length tables in the same file, even when -the option -.Li -G -(or, equivalently, the -.Li %global-table -declaration) is given. -.Pp -.It %switch= Va count -Causes the generated C code to use a -.Li switch -statement scheme, rather than an array lookup table. This can lead to a reduction -in both time and space requirements for some input files. The argument to -this option determines how many -.Li switch -statements are generated. A value of 1 generates 1 -.Li switch -containing all the elements, a value of 2 generates 2 tables with 1/2 the -elements in each -.Li switch , -etc. This is useful since many C compilers cannot correctly generate code -for large -.Li switch -statements. This option was inspired in part by Keith Bostic's original C -program. -.Pp -.It %omit-struct-type -Prevents the transfer of the type declaration to the output file. Use this -option if the type is already defined elsewhere. -.El -.Pp -.No C Code Inclusion -.Pp -Using a syntax similar to GNU utilities -.Li flex -and -.Li bison , -it is possible to directly include C source text and comments verbatim into -the generated output file. This is accomplished by enclosing the region inside -left-justified surrounding -.Li %{ , -.Li %} -pairs. Here is an input fragment based on the previous example that illustrates -this feature: -.Pp -.Bd -literal -offset indent - -%{ -#include -/* This section of code is inserted directly into the output. */ -int return_month_days (struct month *months, int is_leap_year); -%} -struct month { char *name; int number; int days; int leap_days; }; -%% -january, 1, 31, 31 -february, 2, 28, 29 -march, 3, 31, 31 -\&... - -.Ed -.Pp -.Em Format for Keyword Entries -.Pp -The second input file format section contains lines of keywords and any associated -attributes you might supply. A line beginning with -.Li # -in the first column is considered a comment. Everything following the -.Li # -is ignored, up to and including the following newline. A line beginning with -.Li % -in the first column is an option declaration and must not occur within the -keywords section. -.Pp -The first field of each non-comment line is always the keyword itself. It -can be given in two ways: as a simple name, i.e., without surrounding string -quotation marks, or as a string enclosed in double-quotes, in C syntax, possibly -with backslash escapes like -.Li \e" -or -.Li \e234 -or -.Li \exa8 . -In either case, it must start right at the beginning of the line, without -leading whitespace. In this context, a \(lqfield\(rq is considered to extend up to, -but not include, the first blank, comma, or newline. Here is a simple example -taken from a partial list of C reserved words: -.Pp -.Bd -literal -offset indent - -# These are a few C reserved words, see the c.gperf file -# for a complete list of ANSI C reserved words. -unsigned -sizeof -switch -signed -if -default -for -while -return - -.Ed -.Pp -Note that unlike -.Li flex -or -.Li bison -the first -.Li %% -marker may be elided if the declaration section is empty. -.Pp -Additional fields may optionally follow the leading keyword. Fields should -be separated by commas, and terminate at the end of line. What these fields -mean is entirely up to you; they are used to initialize the elements of the -user-defined -.Li struct -provided by you in the declaration section. If the -.Li -t -option (or, equivalently, the -.Li %struct-type -declaration) is -.Em not -enabled these fields are simply ignored. All previous examples except the -last one contain keyword attributes. -.Pp -.Em Including Additional C Functions -.Pp -The optional third section also corresponds closely with conventions found -in -.Li flex -and -.Li bison . -All text in this section, starting at the final -.Li %% -and extending to the end of the input file, is included verbatim into the -generated output file. Naturally, it is your responsibility to ensure that -the code contained in this section is valid C. -.Pp -.Em Where to place directives for GNU Li indent. -.Pp -If you want to invoke GNU -.Li indent -on a -.Li gperf -input file, you will see that GNU -.Li indent -doesn't understand the -.Li %% , -.Li %{ -and -.Li %} -directives that control -.Li gperf -\&'s interpretation of the input file. Therefore you have to insert some directives -for GNU -.Li indent . -More precisely, assuming the most general input file structure -.Pp -.Bd -literal -offset indent - -declarations part 1 -%{ -verbatim code -%} -declarations part 2 -%% -keywords -%% -functions - -.Ed -.Pp -you would insert -.Li *INDENT-OFF* -and -.Li *INDENT-ON* -comments as follows: -.Pp -.Bd -literal -offset indent - -/* *INDENT-OFF* */ -declarations part 1 -%{ -/* *INDENT-ON* */ -verbatim code -/* *INDENT-OFF* */ -%} -declarations part 2 -%% -keywords -%% -/* *INDENT-ON* */ -functions - -.Ed -.Pp -.Ss Output Format for Generated C Code with Li gperf -Several options control how the generated C code appears on the standard output. -Two C functions are generated. They are called -.Li hash -and -.Li in_word_set , -although you may modify their names with a command-line option. Both functions -require two arguments, a string, -.Li char * -.Va str , -and a length parameter, -.Li int -.Va len . -Their default function prototypes are as follows: -.Pp -Function: -.Ft unsigned int -.Fo hash -.Fa (const char * Va str, unsigned int Va len) -.Fc -.Pp -By default, the generated -.Li hash -function returns an integer value created by adding -.Va len -to several user-specified -.Va str -byte positions indexed into an -.Em associated values -table stored in a local static array. The associated values table is constructed -internally by -.Li gperf -and later output as a static local C array called -.Li hash_table . -The relevant selected positions (i.e. indices into -.Va str ) -are specified via the -.Li -k -option when running -.Li gperf , -as detailed in the -.Em Options -section below (see Section -.Dq Options ) . -.Pp -Function: -.Ft -.Fo in_word_set -.Fa (const char * Va str, unsigned int Va len) -.Fc -.Pp -If -.Va str -is in the keyword set, returns a pointer to that keyword. More exactly, if -the option -.Li -t -(or, equivalently, the -.Li %struct-type -declaration) was given, it returns a pointer to the matching keyword's structure. -Otherwise it returns -.Li NULL . -.Pp -If the option -.Li -c -(or, equivalently, the -.Li %compare-strncmp -declaration) is not used, -.Va str -must be a NUL terminated string of exactly length -.Va len . -If -.Li -c -(or, equivalently, the -.Li %compare-strncmp -declaration) is used, -.Va str -must simply be an array of -.Va len -bytes and does not need to be NUL terminated. -.Pp -The code generated for these two functions is affected by the following options: -.Pp -.Bl -tag -width Ds -.It -t -.It --struct-type -Make use of the user-defined -.Li struct . -.Pp -.It -S Va total-switch-statements -.It --switch= Va total-switch-statements -Generate 1 or more C -.Li switch -statement rather than use a large, (and potentially sparse) static array. -Although the exact time and space savings of this approach vary according -to your C compiler's degree of optimization, this method often results in -smaller and faster code. -.El -.Pp -If the -.Li -t -and -.Li -S -options (or, equivalently, the -.Li %struct-type -and -.Li %switch -declarations) are omitted, the default action is to generate a -.Li char * -array containing the keywords, together with additional empty strings used -for padding the array. By experimenting with the various input and output -options, and timing the resulting C code, you can determine the best option -choices for different keyword set characteristics. -.Pp -.Ss Use of NUL bytes -By default, the code generated by -.Li gperf -operates on zero terminated strings, the usual representation of strings in -C. This means that the keywords in the input file must not contain NUL bytes, -and the -.Va str -argument passed to -.Li hash -or -.Li in_word_set -must be NUL terminated and have exactly length -.Va len . -.Pp -If option -.Li -c -(or, equivalently, the -.Li %compare-strncmp -declaration) is used, then the -.Va str -argument does not need to be NUL terminated. The code generated by -.Li gperf -will only access the first -.Va len , -not -.Va len+1 , -bytes starting at -.Va str . -However, the keywords in the input file still must not contain NUL bytes. -.Pp -If option -.Li -l -(or, equivalently, the -.Li %compare-lengths -declaration) is used, then the hash table performs binary comparison. The -keywords in the input file may contain NUL bytes, written in string syntax -as -.Li \e000 -or -.Li \ex00 , -and the code generated by -.Li gperf -will treat NUL like any other byte. Also, in this case the -.Li -c -option (or, equivalently, the -.Li %compare-strncmp -declaration) is ignored. -.Pp -.Sh Invoking Li gperf -There are -.Em many -options to -.Li gperf . -They were added to make the program more convenient for use with real applications. -\(lqOn-line\(rq help is readily available via the -.Li --help -option. Here is the complete list of options. -.Pp -.Ss Specifying the Location of the Output File -.Bl -tag -width Ds -.It --output-file= Va file -Allows you to specify the name of the file to which the output is written -to. -.El -.Pp -The results are written to standard output if no output file is specified -or if it is -.Li - . -.Pp -.Ss Options that affect Interpretation of the Input File -These options are also available as declarations in the input file (see Section -.Dq Gperf Declarations ) . -.Pp -.Bl -tag -width Ds -.It -e Va keyword-delimiter-list -.It --delimiters= Va keyword-delimiter-list -Allows you to provide a string containing delimiters used to separate keywords -from their attributes. The default is ",". This option is essential if you -want to use keywords that have embedded commas or newlines. One useful trick -is to use -e'TAB', where TAB is the literal tab character. -.Pp -.It -t -.It --struct-type -Allows you to include a -.Li struct -type declaration for generated code. Any text before a pair of consecutive -.Li %% -is considered part of the type declaration. Keywords and additional fields -may follow this, one group of fields per line. A set of examples for generating -perfect hash tables and functions for Ada, C, C++, Pascal, Modula 2, Modula -3 and JavaScript reserved words are distributed with this release. -.Pp -.It --ignore-case -Consider upper and lower case ASCII characters as equivalent. The string comparison -will use a case insignificant character comparison. Note that locale dependent -case mappings are ignored. This option is therefore not suitable if a properly -internationalized or locale aware case mapping should be used. (For example, -in a Turkish locale, the upper case equivalent of the lowercase ASCII letter -.Li i -is the non-ASCII character -.Li capital i with dot above . ) -For this case, it is better to apply an uppercase or lowercase conversion -on the string before passing it to the -.Li gperf -generated function. -.El -.Pp -.Ss Options to specify the Language for the Output Code -These options are also available as declarations in the input file (see Section -.Dq Gperf Declarations ) . -.Pp -.Bl -tag -width Ds -.It -L Va generated-language-name -.It --language= Va generated-language-name -Instructs -.Li gperf -to generate code in the language specified by the option's argument. Languages -handled are currently: -.Pp -.Bl -tag -width Ds -.It KR-C -Old-style K&R C. This language is understood by old-style C compilers and -ANSI C compilers, but ANSI C compilers may flag warnings (or even errors) -because of lacking -.Li const . -.Pp -.It C -Common C. This language is understood by ANSI C compilers, and also by old-style -C compilers, provided that you -.Li #define const -to empty for compilers which don't know about this keyword. -.Pp -.It ANSI-C -ANSI C. This language is understood by ANSI C compilers and C++ compilers. -.Pp -.It C++ -C++. This language is understood by C++ compilers. -.El -.Pp -The default is C. -.Pp -.It -a -This option is supported for compatibility with previous releases of -.Li gperf . -It does not do anything. -.Pp -.It -g -This option is supported for compatibility with previous releases of -.Li gperf . -It does not do anything. -.El -.Pp -.Ss Options for fine tuning Details in the Output Code -Most of these options are also available as declarations in the input file -(see Section -.Dq Gperf Declarations ) . -.Pp -.Bl -tag -width Ds -.It -K Va slot-name -.It --slot-name= Va slot-name -This option is only useful when option -.Li -t -(or, equivalently, the -.Li %struct-type -declaration) has been given. By default, the program assumes the structure -component identifier for the keyword is -.Li name . -This option allows an arbitrary choice of identifier for this component, although -it still must occur as the first field in your supplied -.Li struct . -.Pp -.It -F Va initializers -.It --initializer-suffix= Va initializers -This option is only useful when option -.Li -t -(or, equivalently, the -.Li %struct-type -declaration) has been given. It permits to specify initializers for the structure -members following -.Va slot-name -in empty hash table entries. The list of initializers should start with a -comma. By default, the emitted code will zero-initialize structure members -following -.Va slot-name . -.Pp -.It -H Va hash-function-name -.It --hash-function-name= Va hash-function-name -Allows you to specify the name for the generated hash function. Default name -is -.Li hash . -This option permits the use of two hash tables in the same file. -.Pp -.It -N Va lookup-function-name -.It --lookup-function-name= Va lookup-function-name -Allows you to specify the name for the generated lookup function. Default -name is -.Li in_word_set . -This option permits multiple generated hash functions to be used in the same -application. -.Pp -.It -Z Va class-name -.It --class-name= Va class-name -This option is only useful when option -.Li -L C++ -(or, equivalently, the -.Li %language=C++ -declaration) has been given. It allows you to specify the name of generated -C++ class. Default name is -.Li Perfect_Hash . -.Pp -.It -7 -.It --seven-bit -This option specifies that all strings that will be passed as arguments to -the generated hash function and the generated lookup function will solely -consist of 7-bit ASCII characters (bytes in the range 0..127). (Note that -the ANSI C functions -.Li isalnum -and -.Li isgraph -do -.Em not -guarantee that a byte is in this range. Only an explicit test like -.Li c >= 'A' && c <= 'Z' -guarantees this.) This was the default in versions of -.Li gperf -earlier than 2.7; now the default is to support 8-bit and multibyte characters. -.Pp -.It -l -.It --compare-lengths -Compare keyword lengths before trying a string comparison. This option is -mandatory for binary comparisons (see Section -.Dq Binary Strings ) . -It also might cut down on the number of string comparisons made during the -lookup, since keywords with different lengths are never compared via -.Li strcmp . -However, using -.Li -l -might greatly increase the size of the generated C code if the lookup table -range is large (which implies that the switch option -.Li -S -or -.Li %switch -is not enabled), since the length table contains as many elements as there -are entries in the lookup table. -.Pp -.It -c -.It --compare-strncmp -Generates C code that uses the -.Li strncmp -function to perform string comparisons. The default action is to use -.Li strcmp . -.Pp -.It -C -.It --readonly-tables -Makes the contents of all generated lookup tables constant, i.e., \(lqreadonly\(rq. -Many compilers can generate more efficient code for this by putting the tables -in readonly memory. -.Pp -.It -E -.It --enum -Define constant values using an enum local to the lookup function rather than -with #defines. This also means that different lookup functions can reside -in the same file. Thanks to James Clark -.Li . -.Pp -.It -I -.It --includes -Include the necessary system include file, -.Li , -at the beginning of the code. By default, this is not done; the user must -include this header file himself to allow compilation of the code. -.Pp -.It -G -.It --global-table -Generate the static table of keywords as a static global variable, rather -than hiding it inside of the lookup function (which is the default behavior). -.Pp -.It -P -.It --pic -Optimize the generated table for inclusion in shared libraries. This reduces -the startup time of programs using a shared library containing the generated -code. If the option -.Li -t -(or, equivalently, the -.Li %struct-type -declaration) is also given, the first field of the user-defined struct must -be of type -.Li int , -not -.Li char * , -because it will contain offsets into the string pool instead of actual strings. -To convert such an offset to a string, you can use the expression -.Li stringpool + Va o , -where -.Va o -is the offset. The string pool name can be changed through the option -.Li --string-pool-name . -.Pp -.It -Q Va string-pool-name -.It --string-pool-name= Va string-pool-name -Allows you to specify the name of the generated string pool created by option -.Li -P . -The default name is -.Li stringpool . -This option permits the use of two hash tables in the same file, with -.Li -P -and even when the option -.Li -G -(or, equivalently, the -.Li %global-table -declaration) is given. -.Pp -.It --null-strings -Use NULL strings instead of empty strings for empty keyword table entries. -This reduces the startup time of programs using a shared library containing -the generated code (but not as much as option -.Li -P ) , -at the expense of one more test-and-branch instruction at run time. -.Pp -.It -W Va hash-table-array-name -.It --word-array-name= Va hash-table-array-name -Allows you to specify the name for the generated array containing the hash -table. Default name is -.Li wordlist . -This option permits the use of two hash tables in the same file, even when -the option -.Li -G -(or, equivalently, the -.Li %global-table -declaration) is given. -.Pp -.It --length-table-name= Va length-table-array-name -Allows you to specify the name for the generated array containing the length -table. Default name is -.Li lengthtable . -This option permits the use of two length tables in the same file, even when -the option -.Li -G -(or, equivalently, the -.Li %global-table -declaration) is given. -.Pp -.It -S Va total-switch-statements -.It --switch= Va total-switch-statements -Causes the generated C code to use a -.Li switch -statement scheme, rather than an array lookup table. This can lead to a reduction -in both time and space requirements for some input files. The argument to -this option determines how many -.Li switch -statements are generated. A value of 1 generates 1 -.Li switch -containing all the elements, a value of 2 generates 2 tables with 1/2 the -elements in each -.Li switch , -etc. This is useful since many C compilers cannot correctly generate code -for large -.Li switch -statements. This option was inspired in part by Keith Bostic's original C -program. -.Pp -.It -T -.It --omit-struct-type -Prevents the transfer of the type declaration to the output file. Use this -option if the type is already defined elsewhere. -.Pp -.It -p -This option is supported for compatibility with previous releases of -.Li gperf . -It does not do anything. -.El -.Pp -.Ss Options for changing the Algorithms employed by Li gperf -.Bl -tag -width Ds -.It -k Va selected-byte-positions -.It --key-positions= Va selected-byte-positions -Allows selection of the byte positions used in the keywords' hash function. -The allowable choices range between 1-255, inclusive. The positions are separated -by commas, e.g., -.Li -k 9,4,13,14 -; ranges may be used, e.g., -.Li -k 2-7 -; and positions may occur in any order. Furthermore, the wildcard '*' causes -the generated hash function to consider -.Sy all -byte positions in each keyword, whereas '$' instructs the hash function to -use the \(lqfinal byte\(rq of a keyword (this is the only way to use a byte position -greater than 255, incidentally). -.Pp -For instance, the option -.Li -k 1,2,4,6-10,'$' -generates a hash function that considers positions 1,2,4,6,7,8,9,10, plus -the last byte in each keyword (which may be at a different position for each -keyword, obviously). Keywords with length less than the indicated byte positions -work properly, since selected byte positions exceeding the keyword length -are simply not referenced in the hash function. -.Pp -This option is not normally needed since version 2.8 of -.Li gperf -; the default byte positions are computed depending on the keyword set, through -a search that minimizes the number of byte positions. -.Pp -.It -D -.It --duplicates -Handle keywords whose selected byte sets hash to duplicate values. Duplicate -hash values can occur if a set of keywords has the same names, but possesses -different attributes, or if the selected byte positions are not well chosen. -With the -D option -.Li gperf -treats all these keywords as part of an equivalence class and generates a -perfect hash function with multiple comparisons for duplicate keywords. It -is up to you to completely disambiguate the keywords by modifying the generated -C code. However, -.Li gperf -helps you out by organizing the output. -.Pp -Using this option usually means that the generated hash function is no longer -perfect. On the other hand, it permits -.Li gperf -to work on keyword sets that it otherwise could not handle. -.Pp -.It -m Va iterations -.It --multiple-iterations= Va iterations -Perform multiple choices of the -.Li -i -and -.Li -j -values, and choose the best results. This increases the running time by a -factor of -.Va iterations -but does a good job minimizing the generated table size. -.Pp -.It -i Va initial-value -.It --initial-asso= Va initial-value -Provides an initial -.Va value -for the associate values array. Default is 0. Increasing the initial value -helps inflate the final table size, possibly leading to more time efficient -keyword lookups. Note that this option is not particularly useful when -.Li -S -(or, equivalently, -.Li %switch ) -is used. Also, -.Li -i -is overridden when the -.Li -r -option is used. -.Pp -.It -j Va jump-value -.It --jump= Va jump-value -Affects the \(lqjump value\(rq, i.e., how far to advance the associated byte value -upon collisions. -.Va Jump-value -is rounded up to an odd number, the default is 5. If the -.Va jump-value -is 0 -.Li gperf -jumps by random amounts. -.Pp -.It -n -.It --no-strlen -Instructs the generator not to include the length of a keyword when computing -its hash value. This may save a few assembly instructions in the generated -lookup table. -.Pp -.It -r -.It --random -Utilizes randomness to initialize the associated values table. This frequently -generates solutions faster than using deterministic initialization (which -starts all associated values at 0). Furthermore, using the randomization option -generally increases the size of the table. -.Pp -.It -s Va size-multiple -.It --size-multiple= Va size-multiple -Affects the size of the generated hash table. The numeric argument for this -option indicates \(lqhow many times larger or smaller\(rq the maximum associated value -range should be, in relationship to the number of keywords. It can be written -as an integer, a floating-point number or a fraction. For example, a value -of 3 means \(lqallow the maximum associated value to be about 3 times larger than -the number of input keywords\(rq. Conversely, a value of 1/3 means \(lqallow the maximum -associated value to be about 3 times smaller than the number of input keywords\(rq. -Values smaller than 1 are useful for limiting the overall size of the generated -hash table, though the option -.Li -m -is better at this purpose. -.Pp -If `generate switch' option -.Li -S -(or, equivalently, -.Li %switch ) -is -.Em not -enabled, the maximum associated value influences the static array table size, -and a larger table should decrease the time required for an unsuccessful search, -at the expense of extra table space. -.Pp -The default value is 1, thus the default maximum associated value about the -same size as the number of keywords (for efficiency, the maximum associated -value is always rounded up to a power of 2). The actual table size may vary -somewhat, since this technique is essentially a heuristic. -.El -.Pp -.Ss Informative Output -.Bl -tag -width Ds -.It -h -.It --help -Prints a short summary on the meaning of each program option. Aborts further -program execution. -.Pp -.It -v -.It --version -Prints out the current version number. -.Pp -.It -d -.It --debug -Enables the debugging option. This produces verbose diagnostics to \(lqstandard -error\(rq when -.Li gperf -is executing. It is useful both for maintaining the program and for determining -whether a given set of options is actually speeding up the search for a solution. -Some useful information is dumped at the end of the program when the -.Li -d -option is enabled. -.El -.Pp -.Sh Known Bugs and Limitations with Li gperf -The following are some limitations with the current release of -.Li gperf : -.Pp -.Bl -bullet -.It -The -.Li gperf -utility is tuned to execute quickly, and works quickly for small to medium -size data sets (around 1000 keywords). It is extremely useful for maintaining -perfect hash functions for compiler keyword sets. Several recent enhancements -now enable -.Li gperf -to work efficiently on much larger keyword sets (over 15,000 keywords). When -processing large keyword sets it helps greatly to have over 8 megs of RAM. -.Pp -.It -The size of the generate static keyword array can get -.Em extremely -large if the input keyword file is large or if the keywords are quite similar. -This tends to slow down the compilation of the generated C code, and -.Em greatly -inflates the object code size. If this situation occurs, consider using the -.Li -S -option to reduce data size, potentially increasing keyword recognition time -a negligible amount. Since many C compilers cannot correctly generate code -for large switch statements it is important to qualify the -.Va -S -option with an appropriate numerical argument that controls the number of -switch statements generated. -.Pp -.It -The maximum number of selected byte positions has an arbitrary limit of 255. -This restriction should be removed, and if anyone considers this a problem -write me and let me know so I can remove the constraint. -.El -.Pp -.Sh Things Still Left to Do -It should be \(lqrelatively\(rq easy to replace the current perfect hash function -algorithm with a more exhaustive approach; the perfect hash module is essential -independent from other program modules. Additional worthwhile improvements -include: -.Pp -.Bl -bullet -.It -Another useful extension involves modifying the program to generate \(lqminimal\(rq -perfect hash functions (under certain circumstances, the current version can -be rather extravagant in the generated table size). This is mostly of theoretical -interest, since a sparse table often produces faster lookups, and use of the -.Li -S -.Li switch -option can minimize the data size, at the expense of slightly longer lookups -(note that the gcc compiler generally produces good code for -.Li switch -statements, reducing the need for more complex schemes). -.Pp -.It -In addition to improving the algorithm, it would also be useful to generate -an Ada package as the code output, in addition to the current C and C++ routines. -.El -.Pp -.Sh Bibliography -[1] Chang, C.C.: -.Em A Scheme for Constructing Ordered Minimal Perfect Hashing Functions -Information Sciences 39(1986), 187-195. -.Pp -[2] Cichelli, Richard J. -.Em Author's Response to \(lqOn Cichelli's Minimal Perfect Hash Functions Method\(rq -Communications of the ACM, 23, 12(December 1980), 729. -.Pp -[3] Cichelli, Richard J. -.Em Minimal Perfect Hash Functions Made Simple -Communications of the ACM, 23, 1(January 1980), 17-19. -.Pp -[4] Cook, C. R. and Oldehoeft, R.R. -.Em A Letter Oriented Minimal Perfect Hashing Function -SIGPLAN Notices, 17, 9(September 1982), 18-27. -.Pp -[5] Cormack, G. V. and Horspool, R. N. S. and Kaiserwerth, M. -.Em Practical Perfect Hashing -Computer Journal, 28, 1(January 1985), 54-58. -.Pp -[6] Jaeschke, G. -.Em Reciprocal Hashing: A Method for Generating Minimal Perfect Hashing Functions -Communications of the ACM, 24, 12(December 1981), 829-833. -.Pp -[7] Jaeschke, G. and Osterburg, G. -.Em On Cichelli's Minimal Perfect Hash Functions Method -Communications of the ACM, 23, 12(December 1980), 728-729. -.Pp -[8] Sager, Thomas J. -.Em A Polynomial Time Generator for Minimal Perfect Hash Functions -Communications of the ACM, 28, 5(December 1985), 523-532 -.Pp -[9] Schmidt, Douglas C. -.Em GPERF: A Perfect Hash Function Generator -Second USENIX C++ Conference Proceedings, April 1990. -.Pp -[10] Schmidt, Douglas C. -.Em GPERF: A Perfect Hash Function Generator -C++ Report, SIGS 10 10 (November/December 1998). -.Pp -[11] Sebesta, R.W. and Taylor, M.A. -.Em Minimal Perfect Hash Functions for Reserved Word Lists -SIGPLAN Notices, 20, 12(September 1985), 47-53. -.Pp -[12] Sprugnoli, R. -.Em Perfect Hashing Functions: A Single Probe Retrieving Method for Static Sets -Communications of the ACM, 20 11(November 1977), 841-850. -.Pp -[13] Stallman, Richard M. -.Em Using and Porting GNU CC -Free Software Foundation, 1988. -.Pp -[14] Stroustrup, Bjarne -.Em The C++ Programming Language. -Addison-Wesley, 1986. -.Pp -[15] Tiemann, Michael D. -.Em User's Guide to GNU C++ -Free Software Foundation, 1989. -.Pp -.Sh Concept Index diff --git a/contrib/gperf/doc/gperf.texi b/contrib/gperf/doc/gperf.texi deleted file mode 100644 index e23f7b5329c0..000000000000 --- a/contrib/gperf/doc/gperf.texi +++ /dev/null @@ -1,1370 +0,0 @@ -\input texinfo @c -*- texinfo -*- -@c %**start of header -@setfilename gperf.info -@settitle Perfect Hash Function Generator -@c @setchapternewpage odd -@c %**end of header - -@c some day we should @include version.texi instead of defining -@c these values at hand. -@set UPDATED 31 March 2007 -@set EDITION 3.0.3 -@set VERSION 3.0.3 -@c --------------------- - -@c remove the black boxes generated in the GPL appendix. -@finalout - -@c Merge functions into the concept index -@syncodeindex fn cp -@c @synindex pg cp - -@dircategory Programming Tools -@direntry -* Gperf: (gperf). Perfect Hash Function Generator. -@end direntry - -@ifinfo -This file documents the features of the GNU Perfect Hash Function -Generator @value{VERSION}. - -Copyright @copyright{} 1989-2006 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries a copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). - -@end ignore - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that the -section entitled ``GNU General Public License'' is included exactly as -in the original, and provided that the entire resulting derived work is -distributed under the terms of a permission notice identical to this -one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that the section entitled ``GNU General Public License'' and this -permission notice may be included in translations approved by the Free -Software Foundation instead of in the original English. - -@end ifinfo - -@titlepage -@title User's Guide to @code{gperf} @value{VERSION} -@subtitle The GNU Perfect Hash Function Generator -@subtitle Edition @value{EDITION}, @value{UPDATED} -@author Douglas C. Schmidt -@author Bruno Haible - -@page -@vskip 0pt plus 1filll -Copyright @copyright{} 1989-2007 Free Software Foundation, Inc. - - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that the -section entitled ``GNU General Public License'' is included -exactly as in the original, and provided that the entire resulting -derived work is distributed under the terms of a permission notice -identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that the section entitled ``GNU General Public License'' may be -included in a translation approved by the author instead of in the -original English. -@end titlepage - -@ifinfo -@node Top, Copying, (dir), (dir) -@top Introduction - -This manual documents the GNU @code{gperf} perfect hash function generator -utility, focusing on its features and how to use them, and how to report -bugs. - -@menu -* Copying:: GNU @code{gperf} General Public License says - how you can copy and share @code{gperf}. -* Contributors:: People who have contributed to @code{gperf}. -* Motivation:: The purpose of @code{gperf}. -* Search Structures:: Static search structures and GNU @code{gperf} -* Description:: High-level discussion of how GPERF functions. -* Options:: A description of options to the program. -* Bugs:: Known bugs and limitations with GPERF. -* Projects:: Things still left to do. -* Bibliography:: Material Referenced in this Report. - -* Concept Index:: - -@detailmenu --- The Detailed Node Listing --- - -High-Level Description of GNU @code{gperf} - -* Input Format:: Input Format to @code{gperf} -* Output Format:: Output Format for Generated C Code with @code{gperf} -* Binary Strings:: Use of NUL bytes - -Input Format to @code{gperf} - -* Declarations:: Declarations. -* Keywords:: Format for Keyword Entries. -* Functions:: Including Additional C Functions. -* Controls for GNU indent:: Where to place directives for GNU @code{indent}. - -Declarations - -* User-supplied Struct:: Specifying keywords with attributes. -* Gperf Declarations:: Embedding command line options in the input. -* C Code Inclusion:: Including C declarations and definitions. - -Invoking @code{gperf} - -* Input Details:: Options that affect Interpretation of the Input File -* Output Language:: Specifying the Language for the Output Code -* Output Details:: Fine tuning Details in the Output Code -* Algorithmic Details:: Changing the Algorithms employed by @code{gperf} -* Verbosity:: Informative Output - -@end detailmenu -@end menu - -@end ifinfo - -@node Copying, Contributors, Top, Top -@unnumbered GNU GENERAL PUBLIC LICENSE -@include gpl.texinfo - -@node Contributors, Motivation, Copying, Top -@unnumbered Contributors to GNU @code{gperf} Utility - -@itemize @bullet -@item -@cindex Bugs -The GNU @code{gperf} perfect hash function generator utility was -written in GNU C++ by Douglas C. Schmidt. The general -idea for the perfect hash function generator was inspired by Keith -Bostic's algorithm written in C, and distributed to net.sources around -1984. The current program is a heavily modified, enhanced, and extended -implementation of Keith's basic idea, created at the University of -California, Irvine. Bugs, patches, and suggestions should be reported -to @code{}. - -@item -Special thanks is extended to Michael Tiemann and Doug Lea, for -providing a useful compiler, and for giving me a forum to exhibit my -creation. - -In addition, Adam de Boor and Nels Olson provided many tips and insights -that greatly helped improve the quality and functionality of @code{gperf}. - -@item -Bruno Haible enhanced and optimized the search algorithm. He also rewrote -the input routines and the output routines for better reliability, and -added a testsuite. -@end itemize - -@node Motivation, Search Structures, Contributors, Top -@chapter Introduction - -@code{gperf} is a perfect hash function generator written in C++. It -transforms an @var{n} element user-specified keyword set @var{W} into a -perfect hash function @var{F}. @var{F} uniquely maps keywords in -@var{W} onto the range 0..@var{k}, where @var{k} >= @var{n-1}. If @var{k} -= @var{n-1} then @var{F} is a @emph{minimal} perfect hash function. -@code{gperf} generates a 0..@var{k} element static lookup table and a -pair of C functions. These functions determine whether a given -character string @var{s} occurs in @var{W}, using at most one probe into -the lookup table. - -@code{gperf} currently generates the reserved keyword recognizer for -lexical analyzers in several production and research compilers and -language processing tools, including GNU C, GNU C++, GNU Java, GNU Pascal, -GNU Modula 3, and GNU indent. Complete C++ source code for @code{gperf} is -available from @code{http://ftp.gnu.org/pub/gnu/gperf/}. -A paper describing @code{gperf}'s design and implementation in greater -detail is available in the Second USENIX C++ Conference proceedings -or from @code{http://www.cs.wustl.edu/~schmidt/resume.html}. - -@node Search Structures, Description, Motivation, Top -@chapter Static search structures and GNU @code{gperf} -@cindex Static search structure - -A @dfn{static search structure} is an Abstract Data Type with certain -fundamental operations, e.g., @emph{initialize}, @emph{insert}, -and @emph{retrieve}. Conceptually, all insertions occur before any -retrievals. In practice, @code{gperf} generates a @emph{static} array -containing search set keywords and any associated attributes specified -by the user. Thus, there is essentially no execution-time cost for the -insertions. It is a useful data structure for representing @emph{static -search sets}. Static search sets occur frequently in software system -applications. Typical static search sets include compiler reserved -words, assembler instruction opcodes, and built-in shell interpreter -commands. Search set members, called @dfn{keywords}, are inserted into -the structure only once, usually during program initialization, and are -not generally modified at run-time. - -Numerous static search structure implementations exist, e.g., -arrays, linked lists, binary search trees, digital search tries, and -hash tables. Different approaches offer trade-offs between space -utilization and search time efficiency. For example, an @var{n} element -sorted array is space efficient, though the average-case time -complexity for retrieval operations using binary search is -proportional to log @var{n}. Conversely, hash table implementations -often locate a table entry in constant time, but typically impose -additional memory overhead and exhibit poor worst case performance. - -@cindex Minimal perfect hash functions -@emph{Minimal perfect hash functions} provide an optimal solution for a -particular class of static search sets. A minimal perfect hash -function is defined by two properties: - -@itemize @bullet -@item -It allows keyword recognition in a static search set using at most -@emph{one} probe into the hash table. This represents the ``perfect'' -property. -@item -The actual memory allocated to store the keywords is precisely large -enough for the keyword set, and @emph{no larger}. This is the -``minimal'' property. -@end itemize - -For most applications it is far easier to generate @emph{perfect} hash -functions than @emph{minimal perfect} hash functions. Moreover, -non-minimal perfect hash functions frequently execute faster than -minimal ones in practice. This phenomena occurs since searching a -sparse keyword table increases the probability of locating a ``null'' -entry, thereby reducing string comparisons. @code{gperf}'s default -behavior generates @emph{near-minimal} perfect hash functions for -keyword sets. However, @code{gperf} provides many options that permit -user control over the degree of minimality and perfection. - -Static search sets often exhibit relative stability over time. For -example, Ada's 63 reserved words have remained constant for nearly a -decade. It is therefore frequently worthwhile to expend concerted -effort building an optimal search structure @emph{once}, if it -subsequently receives heavy use multiple times. @code{gperf} removes -the drudgery associated with constructing time- and space-efficient -search structures by hand. It has proven a useful and practical tool -for serious programming projects. Output from @code{gperf} is currently -used in several production and research compilers, including GNU C, GNU -C++, GNU Java, GNU Pascal, and GNU Modula 3. The latter two compilers are -not yet part of the official GNU distribution. Each compiler utilizes -@code{gperf} to automatically generate static search structures that -efficiently identify their respective reserved keywords. - -@node Description, Options, Search Structures, Top -@chapter High-Level Description of GNU @code{gperf} - -@menu -* Input Format:: Input Format to @code{gperf} -* Output Format:: Output Format for Generated C Code with @code{gperf} -* Binary Strings:: Use of NUL bytes -@end menu - -The perfect hash function generator @code{gperf} reads a set of -``keywords'' from an input file (or from the standard input by -default). It attempts to derive a perfect hashing function that -recognizes a member of the @dfn{static keyword set} with at most a -single probe into the lookup table. If @code{gperf} succeeds in -generating such a function it produces a pair of C source code routines -that perform hashing and table lookup recognition. All generated C code -is directed to the standard output. Command-line options described -below allow you to modify the input and output format to @code{gperf}. - -By default, @code{gperf} attempts to produce time-efficient code, with -less emphasis on efficient space utilization. However, several options -exist that permit trading-off execution time for storage space and vice -versa. In particular, expanding the generated table size produces a -sparse search structure, generally yielding faster searches. -Conversely, you can direct @code{gperf} to utilize a C @code{switch} -statement scheme that minimizes data space storage size. Furthermore, -using a C @code{switch} may actually speed up the keyword retrieval time -somewhat. Actual results depend on your C compiler, of course. - -In general, @code{gperf} assigns values to the bytes it is using -for hashing until some set of values gives each keyword a unique value. -A helpful heuristic is that the larger the hash value range, the easier -it is for @code{gperf} to find and generate a perfect hash function. -Experimentation is the key to getting the most from @code{gperf}. - -@node Input Format, Output Format, Description, Description -@section Input Format to @code{gperf} -@cindex Format -@cindex Declaration section -@cindex Keywords section -@cindex Functions section -You can control the input file format by varying certain command-line -arguments, in particular the @samp{-t} option. The input's appearance -is similar to GNU utilities @code{flex} and @code{bison} (or UNIX -utilities @code{lex} and @code{yacc}). Here's an outline of the general -format: - -@example -@group -declarations -%% -keywords -%% -functions -@end group -@end example - -@emph{Unlike} @code{flex} or @code{bison}, the declarations section and -the functions section are optional. The following sections describe the -input format for each section. - -@menu -* Declarations:: Declarations. -* Keywords:: Format for Keyword Entries. -* Functions:: Including Additional C Functions. -* Controls for GNU indent:: Where to place directives for GNU @code{indent}. -@end menu - -It is possible to omit the declaration section entirely, if the @samp{-t} -option is not given. In this case the input file begins directly with the -first keyword line, e.g.: - -@example -@group -january -february -march -april -... -@end group -@end example - -@node Declarations, Keywords, Input Format, Input Format -@subsection Declarations - -The keyword input file optionally contains a section for including -arbitrary C declarations and definitions, @code{gperf} declarations that -act like command-line options, as well as for providing a user-supplied -@code{struct}. - -@menu -* User-supplied Struct:: Specifying keywords with attributes. -* Gperf Declarations:: Embedding command line options in the input. -* C Code Inclusion:: Including C declarations and definitions. -@end menu - -@node User-supplied Struct, Gperf Declarations, Declarations, Declarations -@subsubsection User-supplied @code{struct} - -If the @samp{-t} option (or, equivalently, the @samp{%struct-type} declaration) -@emph{is} enabled, you @emph{must} provide a C @code{struct} as the last -component in the declaration section from the input file. The first -field in this struct must be of type @code{char *} or @code{const char *} -if the @samp{-P} option is not given, or of type @code{int} if the option -@samp{-P} (or, equivalently, the @samp{%pic} declaration) is enabled. -This first field must be called @samp{name}, although it is possible to modify -its name with the @samp{-K} option (or, equivalently, the -@samp{%define slot-name} declaration) described below. - -Here is a simple example, using months of the year and their attributes as -input: - -@example -@group -struct month @{ char *name; int number; int days; int leap_days; @}; -%% -january, 1, 31, 31 -february, 2, 28, 29 -march, 3, 31, 31 -april, 4, 30, 30 -may, 5, 31, 31 -june, 6, 30, 30 -july, 7, 31, 31 -august, 8, 31, 31 -september, 9, 30, 30 -october, 10, 31, 31 -november, 11, 30, 30 -december, 12, 31, 31 -@end group -@end example - -@cindex @samp{%%} -Separating the @code{struct} declaration from the list of keywords and -other fields are a pair of consecutive percent signs, @samp{%%}, -appearing left justified in the first column, as in the UNIX utility -@code{lex}. - -If the @code{struct} has already been declared in an include file, it can -be mentioned in an abbreviated form, like this: - -@example -@group -struct month; -%% -january, 1, 31, 31 -... -@end group -@end example - -@node Gperf Declarations, C Code Inclusion, User-supplied Struct, Declarations -@subsubsection Gperf Declarations - -The declaration section can contain @code{gperf} declarations. They -influence the way @code{gperf} works, like command line options do. -In fact, every such declaration is equivalent to a command line option. -There are three forms of declarations: - -@enumerate -@item -Declarations without argument, like @samp{%compare-lengths}. - -@item -Declarations with an argument, like @samp{%switch=@var{count}}. - -@item -Declarations of names of entities in the output file, like -@samp{%define lookup-function-name @var{name}}. -@end enumerate - -When a declaration is given both in the input file and as a command line -option, the command-line option's value prevails. - -The following @code{gperf} declarations are available. - -@table @samp -@item %delimiters=@var{delimiter-list} -@cindex @samp{%delimiters} -Allows you to provide a string containing delimiters used to -separate keywords from their attributes. The default is ",". This -option is essential if you want to use keywords that have embedded -commas or newlines. - -@item %struct-type -@cindex @samp{%struct-type} -Allows you to include a @code{struct} type declaration for generated -code; see above for an example. - -@item %ignore-case -@cindex @samp{%ignore-case} -Consider upper and lower case ASCII characters as equivalent. The string -comparison will use a case insignificant character comparison. Note that -locale dependent case mappings are ignored. - -@item %language=@var{language-name} -@cindex @samp{%language} -Instructs @code{gperf} to generate code in the language specified by the -option's argument. Languages handled are currently: - -@table @samp -@item KR-C -Old-style K&R C. This language is understood by old-style C compilers and -ANSI C compilers, but ANSI C compilers may flag warnings (or even errors) -because of lacking @samp{const}. - -@item C -Common C. This language is understood by ANSI C compilers, and also by -old-style C compilers, provided that you @code{#define const} to empty -for compilers which don't know about this keyword. - -@item ANSI-C -ANSI C. This language is understood by ANSI C compilers and C++ compilers. - -@item C++ -C++. This language is understood by C++ compilers. -@end table - -The default is C. - -@item %define slot-name @var{name} -@cindex @samp{%define slot-name} -This declaration is only useful when option @samp{-t} (or, equivalently, the -@samp{%struct-type} declaration) has been given. -By default, the program assumes the structure component identifier for -the keyword is @samp{name}. This option allows an arbitrary choice of -identifier for this component, although it still must occur as the first -field in your supplied @code{struct}. - -@item %define initializer-suffix @var{initializers} -@cindex @samp{%define initializer-suffix} -This declaration is only useful when option @samp{-t} (or, equivalently, the -@samp{%struct-type} declaration) has been given. -It permits to specify initializers for the structure members following -@var{slot-name} in empty hash table entries. The list of initializers -should start with a comma. By default, the emitted code will -zero-initialize structure members following @var{slot-name}. - -@item %define hash-function-name @var{name} -@cindex @samp{%define hash-function-name} -Allows you to specify the name for the generated hash function. Default -name is @samp{hash}. This option permits the use of two hash tables in -the same file. - -@item %define lookup-function-name @var{name} -@cindex @samp{%define lookup-function-name} -Allows you to specify the name for the generated lookup function. -Default name is @samp{in_word_set}. This option permits multiple -generated hash functions to be used in the same application. - -@item %define class-name @var{name} -@cindex @samp{%define class-name} -This option is only useful when option @samp{-L C++} (or, equivalently, -the @samp{%language=C++} declaration) has been given. It -allows you to specify the name of generated C++ class. Default name is -@code{Perfect_Hash}. - -@item %7bit -@cindex @samp{%7bit} -This option specifies that all strings that will be passed as arguments -to the generated hash function and the generated lookup function will -solely consist of 7-bit ASCII characters (bytes in the range 0..127). -(Note that the ANSI C functions @code{isalnum} and @code{isgraph} do -@emph{not} guarantee that a byte is in this range. Only an explicit -test like @samp{c >= 'A' && c <= 'Z'} guarantees this.) - -@item %compare-lengths -@cindex @samp{%compare-lengths} -Compare keyword lengths before trying a string comparison. This option -is mandatory for binary comparisons (@pxref{Binary Strings}). It also might -cut down on the number of string comparisons made during the lookup, since -keywords with different lengths are never compared via @code{strcmp}. -However, using @samp{%compare-lengths} might greatly increase the size of the -generated C code if the lookup table range is large (which implies that -the switch option @samp{-S} or @samp{%switch} is not enabled), since the length -table contains as many elements as there are entries in the lookup table. - -@item %compare-strncmp -@cindex @samp{%compare-strncmp} -Generates C code that uses the @code{strncmp} function to perform -string comparisons. The default action is to use @code{strcmp}. - -@item %readonly-tables -@cindex @samp{%readonly-tables} -Makes the contents of all generated lookup tables constant, i.e., -``readonly''. Many compilers can generate more efficient code for this -by putting the tables in readonly memory. - -@item %enum -@cindex @samp{%enum} -Define constant values using an enum local to the lookup function rather -than with #defines. This also means that different lookup functions can -reside in the same file. Thanks to James Clark @code{}. - -@item %includes -@cindex @samp{%includes} -Include the necessary system include file, @code{}, at the -beginning of the code. By default, this is not done; the user must -include this header file himself to allow compilation of the code. - -@item %global-table -@cindex @samp{%global-table} -Generate the static table of keywords as a static global variable, -rather than hiding it inside of the lookup function (which is the -default behavior). - -@item %pic -@cindex @samp{%pic} -Optimize the generated table for inclusion in shared libraries. This -reduces the startup time of programs using a shared library containing -the generated code. If the @samp{%struct-type} declaration (or, -equivalently, the option @samp{-t}) is also given, the first field of the -user-defined struct must be of type @samp{int}, not @samp{char *}, because -it will contain offsets into the string pool instead of actual strings. -To convert such an offset to a string, you can use the expression -@samp{stringpool + @var{o}}, where @var{o} is the offset. The string pool -name can be changed through the @samp{%define string-pool-name} declaration. - -@item %define string-pool-name @var{name} -@cindex @samp{%define string-pool-name} -Allows you to specify the name of the generated string pool created by -the declaration @samp{%pic} (or, equivalently, the option @samp{-P}). -The default name is @samp{stringpool}. This declaration permits the use of -two hash tables in the same file, with @samp{%pic} and even when the -@samp{%global-table} declaration (or, equivalently, the option @samp{-G}) -is given. - -@item %null-strings -@cindex @samp{%null-strings} -Use NULL strings instead of empty strings for empty keyword table entries. -This reduces the startup time of programs using a shared library containing -the generated code (but not as much as the declaration @samp{%pic}), at the -expense of one more test-and-branch instruction at run time. - -@item %define word-array-name @var{name} -@cindex @samp{%define word-array-name} -Allows you to specify the name for the generated array containing the -hash table. Default name is @samp{wordlist}. This option permits the -use of two hash tables in the same file, even when the option @samp{-G} -(or, equivalently, the @samp{%global-table} declaration) is given. - -@item %define length-table-name @var{name} -@cindex @samp{%define length-table-name} -Allows you to specify the name for the generated array containing the -length table. Default name is @samp{lengthtable}. This option permits the -use of two length tables in the same file, even when the option @samp{-G} -(or, equivalently, the @samp{%global-table} declaration) is given. - -@item %switch=@var{count} -@cindex @samp{%switch} -Causes the generated C code to use a @code{switch} statement scheme, -rather than an array lookup table. This can lead to a reduction in both -time and space requirements for some input files. The argument to this -option determines how many @code{switch} statements are generated. A -value of 1 generates 1 @code{switch} containing all the elements, a -value of 2 generates 2 tables with 1/2 the elements in each -@code{switch}, etc. This is useful since many C compilers cannot -correctly generate code for large @code{switch} statements. This option -was inspired in part by Keith Bostic's original C program. - -@item %omit-struct-type -@cindex @samp{%omit-struct-type} -Prevents the transfer of the type declaration to the output file. Use -this option if the type is already defined elsewhere. -@end table - -@node C Code Inclusion, , Gperf Declarations, Declarations -@subsubsection C Code Inclusion - -@cindex @samp{%@{} -@cindex @samp{%@}} -Using a syntax similar to GNU utilities @code{flex} and @code{bison}, it -is possible to directly include C source text and comments verbatim into -the generated output file. This is accomplished by enclosing the region -inside left-justified surrounding @samp{%@{}, @samp{%@}} pairs. Here is -an input fragment based on the previous example that illustrates this -feature: - -@example -@group -%@{ -#include -/* This section of code is inserted directly into the output. */ -int return_month_days (struct month *months, int is_leap_year); -%@} -struct month @{ char *name; int number; int days; int leap_days; @}; -%% -january, 1, 31, 31 -february, 2, 28, 29 -march, 3, 31, 31 -... -@end group -@end example - -@node Keywords, Functions, Declarations, Input Format -@subsection Format for Keyword Entries - -The second input file format section contains lines of keywords and any -associated attributes you might supply. A line beginning with @samp{#} -in the first column is considered a comment. Everything following the -@samp{#} is ignored, up to and including the following newline. A line -beginning with @samp{%} in the first column is an option declaration and -must not occur within the keywords section. - -The first field of each non-comment line is always the keyword itself. It -can be given in two ways: as a simple name, i.e., without surrounding -string quotation marks, or as a string enclosed in double-quotes, in -C syntax, possibly with backslash escapes like @code{\"} or @code{\234} -or @code{\xa8}. In either case, it must start right at the beginning -of the line, without leading whitespace. -In this context, a ``field'' is considered to extend up to, but -not include, the first blank, comma, or newline. Here is a simple -example taken from a partial list of C reserved words: - -@example -@group -# These are a few C reserved words, see the c.gperf file -# for a complete list of ANSI C reserved words. -unsigned -sizeof -switch -signed -if -default -for -while -return -@end group -@end example - -Note that unlike @code{flex} or @code{bison} the first @samp{%%} marker -may be elided if the declaration section is empty. - -Additional fields may optionally follow the leading keyword. Fields -should be separated by commas, and terminate at the end of line. What -these fields mean is entirely up to you; they are used to initialize the -elements of the user-defined @code{struct} provided by you in the -declaration section. If the @samp{-t} option (or, equivalently, the -@samp{%struct-type} declaration) is @emph{not} enabled -these fields are simply ignored. All previous examples except the last -one contain keyword attributes. - -@node Functions, Controls for GNU indent, Keywords, Input Format -@subsection Including Additional C Functions - -The optional third section also corresponds closely with conventions -found in @code{flex} and @code{bison}. All text in this section, -starting at the final @samp{%%} and extending to the end of the input -file, is included verbatim into the generated output file. Naturally, -it is your responsibility to ensure that the code contained in this -section is valid C. - -@node Controls for GNU indent, , Functions, Input Format -@subsection Where to place directives for GNU @code{indent}. - -If you want to invoke GNU @code{indent} on a @code{gperf} input file, -you will see that GNU @code{indent} doesn't understand the @samp{%%}, -@samp{%@{} and @samp{%@}} directives that control @code{gperf}'s -interpretation of the input file. Therefore you have to insert some -directives for GNU @code{indent}. More precisely, assuming the most -general input file structure - -@example -@group -declarations part 1 -%@{ -verbatim code -%@} -declarations part 2 -%% -keywords -%% -functions -@end group -@end example - -@noindent -you would insert @samp{*INDENT-OFF*} and @samp{*INDENT-ON*} comments -as follows: - -@example -@group -/* *INDENT-OFF* */ -declarations part 1 -%@{ -/* *INDENT-ON* */ -verbatim code -/* *INDENT-OFF* */ -%@} -declarations part 2 -%% -keywords -%% -/* *INDENT-ON* */ -functions -@end group -@end example - -@node Output Format, Binary Strings, Input Format, Description -@section Output Format for Generated C Code with @code{gperf} -@cindex hash table - -Several options control how the generated C code appears on the standard -output. Two C functions are generated. They are called @code{hash} and -@code{in_word_set}, although you may modify their names with a command-line -option. Both functions require two arguments, a string, @code{char *} -@var{str}, and a length parameter, @code{int} @var{len}. Their default -function prototypes are as follows: - -@deftypefun {unsigned int} hash (const char * @var{str}, unsigned int @var{len}) -By default, the generated @code{hash} function returns an integer value -created by adding @var{len} to several user-specified @var{str} byte -positions indexed into an @dfn{associated values} table stored in a -local static array. The associated values table is constructed -internally by @code{gperf} and later output as a static local C array -called @samp{hash_table}. The relevant selected positions (i.e. indices -into @var{str}) are specified via the @samp{-k} option when running -@code{gperf}, as detailed in the @emph{Options} section below (@pxref{Options}). -@end deftypefun - -@deftypefun {} in_word_set (const char * @var{str}, unsigned int @var{len}) -If @var{str} is in the keyword set, returns a pointer to that -keyword. More exactly, if the option @samp{-t} (or, equivalently, the -@samp{%struct-type} declaration) was given, it returns -a pointer to the matching keyword's structure. Otherwise it returns -@code{NULL}. -@end deftypefun - -If the option @samp{-c} (or, equivalently, the @samp{%compare-strncmp} -declaration) is not used, @var{str} must be a NUL terminated -string of exactly length @var{len}. If @samp{-c} (or, equivalently, the -@samp{%compare-strncmp} declaration) is used, @var{str} must -simply be an array of @var{len} bytes and does not need to be NUL -terminated. - -The code generated for these two functions is affected by the following -options: - -@table @samp -@item -t -@itemx --struct-type -Make use of the user-defined @code{struct}. - -@item -S @var{total-switch-statements} -@itemx --switch=@var{total-switch-statements} -@cindex @code{switch} -Generate 1 or more C @code{switch} statement rather than use a large, -(and potentially sparse) static array. Although the exact time and -space savings of this approach vary according to your C compiler's -degree of optimization, this method often results in smaller and faster -code. -@end table - -If the @samp{-t} and @samp{-S} options (or, equivalently, the -@samp{%struct-type} and @samp{%switch} declarations) are omitted, the default -action -is to generate a @code{char *} array containing the keywords, together with -additional empty strings used for padding the array. By experimenting -with the various input and output options, and timing the resulting C -code, you can determine the best option choices for different keyword -set characteristics. - -@node Binary Strings, , Output Format, Description -@section Use of NUL bytes -@cindex NUL - -By default, the code generated by @code{gperf} operates on zero -terminated strings, the usual representation of strings in C. This means -that the keywords in the input file must not contain NUL bytes, -and the @var{str} argument passed to @code{hash} or @code{in_word_set} -must be NUL terminated and have exactly length @var{len}. - -If option @samp{-c} (or, equivalently, the @samp{%compare-strncmp} -declaration) is used, then the @var{str} argument does not need -to be NUL terminated. The code generated by @code{gperf} will only -access the first @var{len}, not @var{len+1}, bytes starting at @var{str}. -However, the keywords in the input file still must not contain NUL -bytes. - -If option @samp{-l} (or, equivalently, the @samp{%compare-lengths} -declaration) is used, then the hash table performs binary -comparison. The keywords in the input file may contain NUL bytes, -written in string syntax as @code{\000} or @code{\x00}, and the code -generated by @code{gperf} will treat NUL like any other byte. -Also, in this case the @samp{-c} option (or, equivalently, the -@samp{%compare-strncmp} declaration) is ignored. - -@node Options, Bugs, Description, Top -@chapter Invoking @code{gperf} - -There are @emph{many} options to @code{gperf}. They were added to make -the program more convenient for use with real applications. ``On-line'' -help is readily available via the @samp{--help} option. Here is the -complete list of options. - -@menu -* Output File:: Specifying the Location of the Output File -* Input Details:: Options that affect Interpretation of the Input File -* Output Language:: Specifying the Language for the Output Code -* Output Details:: Fine tuning Details in the Output Code -* Algorithmic Details:: Changing the Algorithms employed by @code{gperf} -* Verbosity:: Informative Output -@end menu - -@node Output File, Input Details, Options, Options -@section Specifying the Location of the Output File - -@table @samp -@item --output-file=@var{file} -Allows you to specify the name of the file to which the output is written to. -@end table - -The results are written to standard output if no output file is specified -or if it is @samp{-}. - -@node Input Details, Output Language, Output File, Options -@section Options that affect Interpretation of the Input File - -These options are also available as declarations in the input file -(@pxref{Gperf Declarations}). - -@table @samp -@item -e @var{keyword-delimiter-list} -@itemx --delimiters=@var{keyword-delimiter-list} -@cindex Delimiters -Allows you to provide a string containing delimiters used to -separate keywords from their attributes. The default is ",". This -option is essential if you want to use keywords that have embedded -commas or newlines. One useful trick is to use -e'TAB', where TAB is -the literal tab character. - -@item -t -@itemx --struct-type -Allows you to include a @code{struct} type declaration for generated -code. Any text before a pair of consecutive @samp{%%} is considered -part of the type declaration. Keywords and additional fields may follow -this, one group of fields per line. A set of examples for generating -perfect hash tables and functions for Ada, C, C++, Pascal, Modula 2, -Modula 3 and JavaScript reserved words are distributed with this release. - -@item --ignore-case -Consider upper and lower case ASCII characters as equivalent. The string -comparison will use a case insignificant character comparison. Note that -locale dependent case mappings are ignored. This option is therefore not -suitable if a properly internationalized or locale aware case mapping -should be used. (For example, in a Turkish locale, the upper case equivalent -of the lowercase ASCII letter @samp{i} is the non-ASCII character -@samp{capital i with dot above}.) For this case, it is better to apply -an uppercase or lowercase conversion on the string before passing it to -the @code{gperf} generated function. -@end table - -@node Output Language, Output Details, Input Details, Options -@section Options to specify the Language for the Output Code - -These options are also available as declarations in the input file -(@pxref{Gperf Declarations}). - -@table @samp -@item -L @var{generated-language-name} -@itemx --language=@var{generated-language-name} -Instructs @code{gperf} to generate code in the language specified by the -option's argument. Languages handled are currently: - -@table @samp -@item KR-C -Old-style K&R C. This language is understood by old-style C compilers and -ANSI C compilers, but ANSI C compilers may flag warnings (or even errors) -because of lacking @samp{const}. - -@item C -Common C. This language is understood by ANSI C compilers, and also by -old-style C compilers, provided that you @code{#define const} to empty -for compilers which don't know about this keyword. - -@item ANSI-C -ANSI C. This language is understood by ANSI C compilers and C++ compilers. - -@item C++ -C++. This language is understood by C++ compilers. -@end table - -The default is C. - -@item -a -This option is supported for compatibility with previous releases of -@code{gperf}. It does not do anything. - -@item -g -This option is supported for compatibility with previous releases of -@code{gperf}. It does not do anything. -@end table - -@node Output Details, Algorithmic Details, Output Language, Options -@section Options for fine tuning Details in the Output Code - -Most of these options are also available as declarations in the input file -(@pxref{Gperf Declarations}). - -@table @samp -@item -K @var{slot-name} -@itemx --slot-name=@var{slot-name} -@cindex Slot name -This option is only useful when option @samp{-t} (or, equivalently, the -@samp{%struct-type} declaration) has been given. -By default, the program assumes the structure component identifier for -the keyword is @samp{name}. This option allows an arbitrary choice of -identifier for this component, although it still must occur as the first -field in your supplied @code{struct}. - -@item -F @var{initializers} -@itemx --initializer-suffix=@var{initializers} -@cindex Initializers -This option is only useful when option @samp{-t} (or, equivalently, the -@samp{%struct-type} declaration) has been given. -It permits to specify initializers for the structure members following -@var{slot-name} in empty hash table entries. The list of initializers -should start with a comma. By default, the emitted code will -zero-initialize structure members following @var{slot-name}. - -@item -H @var{hash-function-name} -@itemx --hash-function-name=@var{hash-function-name} -Allows you to specify the name for the generated hash function. Default -name is @samp{hash}. This option permits the use of two hash tables in -the same file. - -@item -N @var{lookup-function-name} -@itemx --lookup-function-name=@var{lookup-function-name} -Allows you to specify the name for the generated lookup function. -Default name is @samp{in_word_set}. This option permits multiple -generated hash functions to be used in the same application. - -@item -Z @var{class-name} -@itemx --class-name=@var{class-name} -@cindex Class name -This option is only useful when option @samp{-L C++} (or, equivalently, -the @samp{%language=C++} declaration) has been given. It -allows you to specify the name of generated C++ class. Default name is -@code{Perfect_Hash}. - -@item -7 -@itemx --seven-bit -This option specifies that all strings that will be passed as arguments -to the generated hash function and the generated lookup function will -solely consist of 7-bit ASCII characters (bytes in the range 0..127). -(Note that the ANSI C functions @code{isalnum} and @code{isgraph} do -@emph{not} guarantee that a byte is in this range. Only an explicit -test like @samp{c >= 'A' && c <= 'Z'} guarantees this.) This was the -default in versions of @code{gperf} earlier than 2.7; now the default is -to support 8-bit and multibyte characters. - -@item -l -@itemx --compare-lengths -Compare keyword lengths before trying a string comparison. This option -is mandatory for binary comparisons (@pxref{Binary Strings}). It also might -cut down on the number of string comparisons made during the lookup, since -keywords with different lengths are never compared via @code{strcmp}. -However, using @samp{-l} might greatly increase the size of the -generated C code if the lookup table range is large (which implies that -the switch option @samp{-S} or @samp{%switch} is not enabled), since the length -table contains as many elements as there are entries in the lookup table. - -@item -c -@itemx --compare-strncmp -Generates C code that uses the @code{strncmp} function to perform -string comparisons. The default action is to use @code{strcmp}. - -@item -C -@itemx --readonly-tables -Makes the contents of all generated lookup tables constant, i.e., -``readonly''. Many compilers can generate more efficient code for this -by putting the tables in readonly memory. - -@item -E -@itemx --enum -Define constant values using an enum local to the lookup function rather -than with #defines. This also means that different lookup functions can -reside in the same file. Thanks to James Clark @code{}. - -@item -I -@itemx --includes -Include the necessary system include file, @code{}, at the -beginning of the code. By default, this is not done; the user must -include this header file himself to allow compilation of the code. - -@item -G -@itemx --global-table -Generate the static table of keywords as a static global variable, -rather than hiding it inside of the lookup function (which is the -default behavior). - -@item -P -@itemx --pic -Optimize the generated table for inclusion in shared libraries. This -reduces the startup time of programs using a shared library containing -the generated code. If the option @samp{-t} (or, equivalently, the -@samp{%struct-type} declaration) is also given, the first field of the -user-defined struct must be of type @samp{int}, not @samp{char *}, because -it will contain offsets into the string pool instead of actual strings. -To convert such an offset to a string, you can use the expression -@samp{stringpool + @var{o}}, where @var{o} is the offset. The string pool -name can be changed through the option @samp{--string-pool-name}. - -@item -Q @var{string-pool-name} -@itemx --string-pool-name=@var{string-pool-name} -Allows you to specify the name of the generated string pool created by -option @samp{-P}. The default name is @samp{stringpool}. This option -permits the use of two hash tables in the same file, with @samp{-P} and -even when the option @samp{-G} (or, equivalently, the @samp{%global-table} -declaration) is given. - -@item --null-strings -Use NULL strings instead of empty strings for empty keyword table entries. -This reduces the startup time of programs using a shared library containing -the generated code (but not as much as option @samp{-P}), at the expense -of one more test-and-branch instruction at run time. - -@item -W @var{hash-table-array-name} -@itemx --word-array-name=@var{hash-table-array-name} -@cindex Array name -Allows you to specify the name for the generated array containing the -hash table. Default name is @samp{wordlist}. This option permits the -use of two hash tables in the same file, even when the option @samp{-G} -(or, equivalently, the @samp{%global-table} declaration) is given. - -@itemx --length-table-name=@var{length-table-array-name} -@cindex Array name -Allows you to specify the name for the generated array containing the -length table. Default name is @samp{lengthtable}. This option permits the -use of two length tables in the same file, even when the option @samp{-G} -(or, equivalently, the @samp{%global-table} declaration) is given. - -@item -S @var{total-switch-statements} -@itemx --switch=@var{total-switch-statements} -@cindex @code{switch} -Causes the generated C code to use a @code{switch} statement scheme, -rather than an array lookup table. This can lead to a reduction in both -time and space requirements for some input files. The argument to this -option determines how many @code{switch} statements are generated. A -value of 1 generates 1 @code{switch} containing all the elements, a -value of 2 generates 2 tables with 1/2 the elements in each -@code{switch}, etc. This is useful since many C compilers cannot -correctly generate code for large @code{switch} statements. This option -was inspired in part by Keith Bostic's original C program. - -@item -T -@itemx --omit-struct-type -Prevents the transfer of the type declaration to the output file. Use -this option if the type is already defined elsewhere. - -@item -p -This option is supported for compatibility with previous releases of -@code{gperf}. It does not do anything. -@end table - -@node Algorithmic Details, Verbosity, Output Details, Options -@section Options for changing the Algorithms employed by @code{gperf} - -@table @samp -@item -k @var{selected-byte-positions} -@itemx --key-positions=@var{selected-byte-positions} -Allows selection of the byte positions used in the keywords' -hash function. The allowable choices range between 1-255, inclusive. -The positions are separated by commas, e.g., @samp{-k 9,4,13,14}; -ranges may be used, e.g., @samp{-k 2-7}; and positions may occur -in any order. Furthermore, the wildcard '*' causes the generated -hash function to consider @strong{all} byte positions in each keyword, -whereas '$' instructs the hash function to use the ``final byte'' -of a keyword (this is the only way to use a byte position greater than -255, incidentally). - -For instance, the option @samp{-k 1,2,4,6-10,'$'} generates a hash -function that considers positions 1,2,4,6,7,8,9,10, plus the last -byte in each keyword (which may be at a different position for each -keyword, obviously). Keywords -with length less than the indicated byte positions work properly, since -selected byte positions exceeding the keyword length are simply not -referenced in the hash function. - -This option is not normally needed since version 2.8 of @code{gperf}; -the default byte positions are computed depending on the keyword set, -through a search that minimizes the number of byte positions. - -@item -D -@itemx --duplicates -@cindex Duplicates -Handle keywords whose selected byte sets hash to duplicate values. -Duplicate hash values can occur if a set of keywords has the same names, but -possesses different attributes, or if the selected byte positions are not well -chosen. With the -D option @code{gperf} treats all these keywords as -part of an equivalence class and generates a perfect hash function with -multiple comparisons for duplicate keywords. It is up to you to completely -disambiguate the keywords by modifying the generated C code. However, -@code{gperf} helps you out by organizing the output. - -Using this option usually means that the generated hash function is no -longer perfect. On the other hand, it permits @code{gperf} to work on -keyword sets that it otherwise could not handle. - -@item -m @var{iterations} -@itemx --multiple-iterations=@var{iterations} -Perform multiple choices of the @samp{-i} and @samp{-j} values, and -choose the best results. This increases the running time by a factor of -@var{iterations} but does a good job minimizing the generated table size. - -@item -i @var{initial-value} -@itemx --initial-asso=@var{initial-value} -Provides an initial @var{value} for the associate values array. Default -is 0. Increasing the initial value helps inflate the final table size, -possibly leading to more time efficient keyword lookups. Note that this -option is not particularly useful when @samp{-S} (or, equivalently, -@samp{%switch}) is used. Also, -@samp{-i} is overridden when the @samp{-r} option is used. - -@item -j @var{jump-value} -@itemx --jump=@var{jump-value} -@cindex Jump value -Affects the ``jump value'', i.e., how far to advance the associated -byte value upon collisions. @var{Jump-value} is rounded up to an -odd number, the default is 5. If the @var{jump-value} is 0 @code{gperf} -jumps by random amounts. - -@item -n -@itemx --no-strlen -Instructs the generator not to include the length of a keyword when -computing its hash value. This may save a few assembly instructions in -the generated lookup table. - -@item -r -@itemx --random -Utilizes randomness to initialize the associated values table. This -frequently generates solutions faster than using deterministic -initialization (which starts all associated values at 0). Furthermore, -using the randomization option generally increases the size of the -table. - -@item -s @var{size-multiple} -@itemx --size-multiple=@var{size-multiple} -Affects the size of the generated hash table. The numeric argument for -this option indicates ``how many times larger or smaller'' the maximum -associated value range should be, in relationship to the number of keywords. -It can be written as an integer, a floating-point number or a fraction. -For example, a value of 3 means ``allow the maximum associated value to be -about 3 times larger than the number of input keywords''. -Conversely, a value of 1/3 means ``allow the maximum associated value to -be about 3 times smaller than the number of input keywords''. Values -smaller than 1 are useful for limiting the overall size of the generated hash -table, though the option @samp{-m} is better at this purpose. - -If `generate switch' option @samp{-S} (or, equivalently, @samp{%switch}) is -@emph{not} enabled, the maximum -associated value influences the static array table size, and a larger -table should decrease the time required for an unsuccessful search, at -the expense of extra table space. - -The default value is 1, thus the default maximum associated value about -the same size as the number of keywords (for efficiency, the maximum -associated value is always rounded up to a power of 2). The actual -table size may vary somewhat, since this technique is essentially a -heuristic. -@end table - -@node Verbosity, , Algorithmic Details, Options -@section Informative Output - -@table @samp -@item -h -@itemx --help -Prints a short summary on the meaning of each program option. Aborts -further program execution. - -@item -v -@itemx --version -Prints out the current version number. - -@item -d -@itemx --debug -Enables the debugging option. This produces verbose diagnostics to -``standard error'' when @code{gperf} is executing. It is useful both for -maintaining the program and for determining whether a given set of -options is actually speeding up the search for a solution. Some useful -information is dumped at the end of the program when the @samp{-d} -option is enabled. -@end table - -@node Bugs, Projects, Options, Top -@chapter Known Bugs and Limitations with @code{gperf} - -The following are some limitations with the current release of -@code{gperf}: - -@itemize @bullet -@item -The @code{gperf} utility is tuned to execute quickly, and works quickly -for small to medium size data sets (around 1000 keywords). It is -extremely useful for maintaining perfect hash functions for compiler -keyword sets. Several recent enhancements now enable @code{gperf} to -work efficiently on much larger keyword sets (over 15,000 keywords). -When processing large keyword sets it helps greatly to have over 8 megs -of RAM. - -@item -The size of the generate static keyword array can get @emph{extremely} -large if the input keyword file is large or if the keywords are quite -similar. This tends to slow down the compilation of the generated C -code, and @emph{greatly} inflates the object code size. If this -situation occurs, consider using the @samp{-S} option to reduce data -size, potentially increasing keyword recognition time a negligible -amount. Since many C compilers cannot correctly generate code for -large switch statements it is important to qualify the @var{-S} option -with an appropriate numerical argument that controls the number of -switch statements generated. - -@item -The maximum number of selected byte positions has an -arbitrary limit of 255. This restriction should be removed, and if -anyone considers this a problem write me and let me know so I can remove -the constraint. -@end itemize - -@node Projects, Bibliography, Bugs, Top -@chapter Things Still Left to Do - -It should be ``relatively'' easy to replace the current perfect hash -function algorithm with a more exhaustive approach; the perfect hash -module is essential independent from other program modules. Additional -worthwhile improvements include: - -@itemize @bullet -@item -Another useful extension involves modifying the program to generate -``minimal'' perfect hash functions (under certain circumstances, the -current version can be rather extravagant in the generated table size). -This is mostly of theoretical interest, since a sparse table -often produces faster lookups, and use of the @samp{-S} @code{switch} -option can minimize the data size, at the expense of slightly longer -lookups (note that the gcc compiler generally produces good code for -@code{switch} statements, reducing the need for more complex schemes). - -@item -In addition to improving the algorithm, it would also be useful to -generate an Ada package as the code output, in addition to the current -C and C++ routines. -@end itemize - -@page - -@node Bibliography, Concept Index, Projects, Top -@chapter Bibliography - -[1] Chang, C.C.: @i{A Scheme for Constructing Ordered Minimal Perfect -Hashing Functions} Information Sciences 39(1986), 187-195. - -[2] Cichelli, Richard J. @i{Author's Response to ``On Cichelli's Minimal Perfect Hash -Functions Method''} Communications of the ACM, 23, 12(December 1980), 729. - -[3] Cichelli, Richard J. @i{Minimal Perfect Hash Functions Made Simple} -Communications of the ACM, 23, 1(January 1980), 17-19. - -[4] Cook, C. R. and Oldehoeft, R.R. @i{A Letter Oriented Minimal -Perfect Hashing Function} SIGPLAN Notices, 17, 9(September 1982), 18-27. - -[5] Cormack, G. V. and Horspool, R. N. S. and Kaiserwerth, M. -@i{Practical Perfect Hashing} Computer Journal, 28, 1(January 1985), 54-58. - -[6] Jaeschke, G. @i{Reciprocal Hashing: A Method for Generating Minimal -Perfect Hashing Functions} Communications of the ACM, 24, 12(December -1981), 829-833. - -[7] Jaeschke, G. and Osterburg, G. @i{On Cichelli's Minimal Perfect -Hash Functions Method} Communications of the ACM, 23, 12(December 1980), -728-729. - -[8] Sager, Thomas J. @i{A Polynomial Time Generator for Minimal Perfect -Hash Functions} Communications of the ACM, 28, 5(December 1985), 523-532 - -[9] Schmidt, Douglas C. @i{GPERF: A Perfect Hash Function Generator} -Second USENIX C++ Conference Proceedings, April 1990. - -[10] Schmidt, Douglas C. @i{GPERF: A Perfect Hash Function Generator} -C++ Report, SIGS 10 10 (November/December 1998). - -[11] Sebesta, R.W. and Taylor, M.A. @i{Minimal Perfect Hash Functions -for Reserved Word Lists} SIGPLAN Notices, 20, 12(September 1985), 47-53. - -[12] Sprugnoli, R. @i{Perfect Hashing Functions: A Single Probe -Retrieving Method for Static Sets} Communications of the ACM, 20 -11(November 1977), 841-850. - -[13] Stallman, Richard M. @i{Using and Porting GNU CC} Free Software Foundation, -1988. - -[14] Stroustrup, Bjarne @i{The C++ Programming Language.} Addison-Wesley, 1986. - -[15] Tiemann, Michael D. @i{User's Guide to GNU C++} Free Software -Foundation, 1989. - -@node Concept Index, , Bibliography, Top -@unnumbered Concept Index - -@printindex cp - -@contents -@bye diff --git a/contrib/gperf/doc/gpl.texinfo b/contrib/gperf/doc/gpl.texinfo deleted file mode 100644 index be2dc253c470..000000000000 --- a/contrib/gperf/doc/gpl.texinfo +++ /dev/null @@ -1,398 +0,0 @@ -@c This GPL is meant to be included from other files. -@c To format a standalone GPL, use license.texi. - -@center Version 2, June 1991 - -@display -Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc., -59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. -@end display - -@unnumberedsec Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software---to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) 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 -this service 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 make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. 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. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - -@iftex -@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -@end iftex -@ifinfo -@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -@end ifinfo - -@enumerate 0 -@item -This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The ``Program'', below, -refers to any such program or work, and a ``work based on the Program'' -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term ``modification''.) Each licensee is addressed as ``you''. - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - -@item -You may copy and distribute 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 and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -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. - -@item -You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - -@enumerate a -@item -You must cause the modified files to carry prominent notices -stating that you changed the files and the date of any change. - -@item -You must cause any work that you distribute or publish, that in -whole or in part contains or is derived from the Program or any -part thereof, to be licensed as a whole at no charge to all third -parties under the terms of this License. - -@item -If the modified program normally reads commands interactively -when run, you must cause it, when started running for such -interactive use in the most ordinary way, to print or display an -announcement including an appropriate copyright notice and a -notice that there is no warranty (or else, saying that you provide -a warranty) and that users may redistribute the program under -these conditions, and telling the user how to view a copy of this -License. (Exception: if the Program itself is interactive but -does not normally print such an announcement, your work based on -the Program is not required to print an announcement.) -@end enumerate - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -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 Program, 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 Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - -@item -You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - -@enumerate a -@item -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; or, - -@item -Accompany it with a written offer, valid for at least three -years, to give any third party, for a charge no more than your -cost of physically performing source distribution, a complete -machine-readable copy of the corresponding source code, to be -distributed under the terms of Sections 1 and 2 above on a medium -customarily used for software interchange; or, - -@item -Accompany it with the information you received as to the offer -to distribute corresponding source code. (This alternative is -allowed only for noncommercial distribution and only if you -received the program in object code or executable form with such -an offer, in accord with Subsection b above.) -@end enumerate - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, 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 executable. However, as a -special exception, the source code 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. - -If distribution of executable or 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 counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - -@item -You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program 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. - -@item -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 Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - -@item -Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program 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 to -this License. - -@item -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 Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program 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 Program. - -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. - -@item -If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program 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. - -@item -The Free Software Foundation may publish revised and/or new versions -of the 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 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 Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - -@item -If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, 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. - -@iftex -@vskip -@baselineskip -@vskip -@baselineskip -@heading NO WARRANTY -@end iftex -@ifinfo -@center NO WARRANTY -@end ifinfo - -@item -BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. - -@item -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 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. -@end enumerate - -@iftex -@heading END OF TERMS AND CONDITIONS -@end iftex -@ifinfo -@center END OF TERMS AND CONDITIONS -@end ifinfo - -@page -@unnumberedsec 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 -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. - -@smallexample -@var{one line to give the program's name and an idea of what it does.} -Copyright (C) @var{year} @var{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 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -@end smallexample - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - -@smallexample -Gnomovision version 69, Copyright (C) @var{year} @var{name of author} -Gnomovision 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. -@end smallexample - -The hypothetical commands @samp{show w} and @samp{show c} should show -the appropriate parts of the General Public License. Of course, the -commands you use may be called something other than @samp{show w} and -@samp{show c}; they could even be mouse-clicks or menu items---whatever -suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a ``copyright disclaimer'' for the program, if -necessary. Here is a sample; alter the names: - -@example -@group -Yoyodyne, Inc., hereby disclaims all copyright -interest in the program `Gnomovision' -(which makes passes at compilers) written -by James Hacker. - -@var{signature of Ty Coon}, 1 April 1989 -Ty Coon, President of Vice -@end group -@end example - -This 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 Library General -Public License instead of this License. diff --git a/contrib/gperf/doc/help2man b/contrib/gperf/doc/help2man deleted file mode 100755 index 5fc20dc4529f..000000000000 --- a/contrib/gperf/doc/help2man +++ /dev/null @@ -1,517 +0,0 @@ -#!/usr/bin/perl -w - -# Generate a short man page from --help and --version output. -# Copyright © 1997, 1998, 1999, 2000 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Written by Brendan O'Dea -# Available from ftp://ftp.gnu.org/gnu/help2man/ - -use 5.004; -use strict; -use Getopt::Long; -use Text::Tabs qw(expand); -use POSIX qw(strftime setlocale LC_TIME); - -my $this_program = 'help2man'; -my $this_version = '1.23'; -my $version_info = < -EOT - -my $help_info = <. -EOT - -my $section = 1; -my ($opt_name, @opt_include, $opt_output, $opt_no_info); - -# Parse options. -Getopt::Long::config('bundling'); -GetOptions ( - 'n|name=s' => \$opt_name, - 's|section=s' => \$section, - 'i|include=s' => sub { push @opt_include, [ pop, 1 ] }, - 'I|opt-include=s' => sub { push @opt_include, [ pop, 0 ] }, - 'o|output=s' => \$opt_output, - 'N|no-info' => \$opt_no_info, - help => sub { print $help_info; exit }, - version => sub { print $version_info; exit }, -) or die $help_info; - -die $help_info unless @ARGV == 1; - -my %include = (); -my %append = (); -my @include = (); # retain order given in include file - -# Provide replacement `quote-regex' operator for pre-5.005. -BEGIN { eval q(sub qr { '' =~ $_[0]; $_[0] }) if $] < 5.005 } - -# Process include file (if given). Format is: -# -# [section name] -# verbatim text -# -# or -# -# /pattern/ -# verbatim text -# - -for (@opt_include) -{ - my ($inc, $required) = @$_; - - next unless -f $inc or $required; - die "$this_program: can't open `$inc' ($!)\n" - unless open INC, $inc; - - my $key; - my $hash = \%include; - - while () - { - # [section] - if (/^\[([^]]+)\]/) - { - $key = uc $1; - $key =~ s/^\s+//; - $key =~ s/\s+$//; - $hash = \%include; - push @include, $key unless $include{$key}; - next; - } - - # /pattern/ - if (m!^/(.*)/([ims]*)!) - { - my $pat = $2 ? "(?$2)$1" : $1; - - # Check pattern. - eval { $key = qr($pat) }; - if ($@) - { - $@ =~ s/ at .*? line \d.*//; - die "$inc:$.:$@"; - } - - $hash = \%append; - next; - } - - # Silently ignore anything before the first - # section--allows for comments and revision info. - next unless $key; - - $hash->{$key} ||= ''; - $hash->{$key} .= $_; - } - - close INC; - - die "$this_program: no valid information found in `$inc'\n" - unless $key; -} - -# Compress trailing blank lines. -for my $hash (\(%include, %append)) -{ - for (keys %$hash) { $hash->{$_} =~ s/\n+$/\n/ } -} - -# Turn off localisation of executable's ouput. -@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3; - -# Turn off localisation of date (for strftime). -setlocale LC_TIME, 'C'; - -# Grab help and version info from executable. -my ($help_text, $version_text) = map { - join '', map { s/ +$//; expand $_ } `$ARGV[0] --$_ 2>/dev/null` - or die "$this_program: can't get `--$_' info from $ARGV[0]\n" -} qw(help version); - -my $date = strftime "%B %Y", localtime; -(my $program = $ARGV[0]) =~ s!.*/!!; -my $package = $program; -my $version; - -if ($opt_output) -{ - unlink $opt_output - or die "$this_program: can't unlink $opt_output ($!)\n" - if -e $opt_output; - - open STDOUT, ">$opt_output" - or die "$this_program: can't create $opt_output ($!)\n"; -} - -# The first line of the --version information is assumed to be in one -# of the following formats: -# -# -# -# {GNU,Free} -# ({GNU,Free} ) -# - {GNU,Free} -# -# and seperated from any copyright/author details by a blank line. - -($_, $version_text) = split /\n+/, $version_text, 2; - -if (/^(\S+) +\(((?:GNU|Free) +[^)]+)\) +(.*)/ or - /^(\S+) +- *((?:GNU|Free) +\S+) +(.*)/) -{ - $program = $1; - $package = $2; - $version = $3; -} -elsif (/^((?:GNU|Free) +)?(\S+) +(.*)/) -{ - $program = $2; - $package = $1 ? "$1$2" : $2; - $version = $3; -} -else -{ - $version = $_; -} - -$program =~ s!.*/!!; - -# No info for `info' itself. -$opt_no_info = 1 if $program eq 'info'; - -# --name overrides --include contents. -$include{NAME} = "$program \\- $opt_name\n" if $opt_name; - -# Default (useless) NAME paragraph. -$include{NAME} ||= "$program \\- manual page for $program $version\n"; - -# Man pages traditionally have the page title in caps. -my $PROGRAM = uc $program; - -# Extract usage clause(s) [if any] for SYNOPSIS. -if ($help_text =~ s/^Usage:( +(\S+))(.*)((?:\n(?: {6}\1| *or: +\S).*)*)//m) -{ - my @syn = $2 . $3; - - if ($_ = $4) - { - s/^\n//; - for (split /\n/) { s/^ *(or: +)?//; push @syn, $_ } - } - - my $synopsis = ''; - for (@syn) - { - $synopsis .= ".br\n" if $synopsis; - s!^\S*/!!; - s/^(\S+) *//; - $synopsis .= ".B $1\n"; - s/\s+$//; - s/(([][]|\.\.+)+)/\\fR$1\\fI/g; - s/^/\\fI/ unless s/^\\fR//; - $_ .= '\fR'; - s/(\\fI)( *)/$2$1/g; - s/\\fI\\fR//g; - s/^\\fR//; - s/\\fI$//; - s/^\./\\&./; - - $synopsis .= "$_\n"; - } - - $include{SYNOPSIS} ||= $synopsis; -} - -# Process text, initial section is DESCRIPTION. -my $sect = 'DESCRIPTION'; -$_ = "$help_text\n\n$version_text"; - -# Normalise paragraph breaks. -s/^\n+//; -s/\n*$/\n/; -s/\n\n+/\n\n/g; - -# Temporarily exchange leading dots, apostrophes and backslashes for -# tokens. -s/^\./\x80/mg; -s/^'/\x81/mg; -s/\\/\x82/g; - -# Start a new paragraph (if required) for these. -s/([^\n])\n(Report +bugs|Email +bug +reports +to|Written +by)/$1\n\n$2/g; - -sub convert_option; - -while (length) -{ - # Convert some standard paragraph names. - if (s/^(Options|Examples): *\n//) - { - $sect = uc $1; - next; - } - - # Copyright section - if (/^Copyright +[(\xa9]/) - { - $sect = 'COPYRIGHT'; - $include{$sect} ||= ''; - $include{$sect} .= ".PP\n" if $include{$sect}; - - my $copy; - ($copy, $_) = split /\n\n/, $_, 2; - - for ($copy) - { - # Add back newline - s/\n*$/\n/; - - # Convert iso9959-1 copyright symbol or (c) to nroff - # character. - s/^Copyright +(?:\xa9|\([Cc]\))/Copyright \\(co/mg; - - # Insert line breaks before additional copyright messages - # and the disclaimer. - s/(.)\n(Copyright |This +is +free +software)/$1\n.br\n$2/g; - - # Join hyphenated lines. - s/([A-Za-z])-\n */$1/g; - } - - $include{$sect} .= $copy; - $_ ||= ''; - next; - } - - # Catch bug report text. - if (/^(Report +bugs|Email +bug +reports +to) /) - { - $sect = 'REPORTING BUGS'; - } - - # Author section. - elsif (/^Written +by/) - { - $sect = 'AUTHOR'; - } - - # Examples, indicated by an indented leading $, % or > are - # rendered in a constant width font. - if (/^( +)([\$\%>] )\S/) - { - my $indent = $1; - my $prefix = $2; - my $break = '.IP'; - $include{$sect} ||= ''; - while (s/^$indent\Q$prefix\E(\S.*)\n*//) - { - $include{$sect} .= "$break\n\\f(CW$prefix$1\\fR\n"; - $break = '.br'; - } - - next; - } - - my $matched = ''; - $include{$sect} ||= ''; - - # Sub-sections have a trailing colon and the second line indented. - if (s/^(\S.*:) *\n / /) - { - $matched .= $& if %append; - $include{$sect} .= qq(.SS "$1"\n); - } - - my $indent = 0; - my $content = ''; - - # Option with description. - if (s/^( {1,10}([+-]\S.*?))(?:( +)|\n( {20,}))(\S.*)\n//) - { - $matched .= $& if %append; - $indent = length ($4 || "$1$3"); - $content = ".TP\n\x83$2\n\x83$5\n"; - unless ($4) - { - # Indent may be different on second line. - $indent = length $& if /^ {20,}/; - } - } - - # Option without description. - elsif (s/^ {1,10}([+-]\S.*)\n//) - { - $matched .= $& if %append; - $content = ".HP\n\x83$1\n"; - $indent = 80; # not continued - } - - # Indented paragraph with tag. - elsif (s/^( +(\S.*?) +)(\S.*)\n//) - { - $matched .= $& if %append; - $indent = length $1; - $content = ".TP\n\x83$2\n\x83$3\n"; - } - - # Indented paragraph. - elsif (s/^( +)(\S.*)\n//) - { - $matched .= $& if %append; - $indent = length $1; - $content = ".IP\n\x83$2\n"; - } - - # Left justified paragraph. - else - { - s/(.*)\n//; - $matched .= $& if %append; - $content = ".PP\n" if $include{$sect}; - $content .= "$1\n"; - } - - # Append continuations. - while (s/^ {$indent}(\S.*)\n//) - { - $matched .= $& if %append; - $content .= "\x83$1\n" - } - - # Move to next paragraph. - s/^\n+//; - - for ($content) - { - # Leading dot and apostrophe protection. - s/\x83\./\x80/g; - s/\x83'/\x81/g; - s/\x83//g; - - # Convert options. - s/(^| )(-[][\w=-]+)/$1 . convert_option $2/mge; - } - - # Check if matched paragraph contains /pat/. - if (%append) - { - for my $pat (keys %append) - { - if ($matched =~ $pat) - { - $content .= ".PP\n" unless $append{$pat} =~ /^\./; - $content .= $append{$pat}; - } - } - } - - $include{$sect} .= $content; -} - -# Refer to the real documentation. -unless ($opt_no_info) -{ - $sect = 'SEE ALSO'; - $include{$sect} ||= ''; - $include{$sect} .= ".PP\n" if $include{$sect}; - $include{$sect} .= < -# and Bruno Haible . -# -# This file is part of GNU GPERF. -# -# GNU GPERF is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU GPERF is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; see the file COPYING. -# If not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#### Start of system configuration section. #### - -# Directories used by "make": -srcdir = @srcdir@ - -# Directories used by "make install": -prefix = @prefix@ -local_prefix = /usr/local -exec_prefix = @exec_prefix@ - -# Programs used by "make": -# C compiler -CC = @CC@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -# C++ compiler -CXX = @CXX@ -CXXFLAGS = @CXXFLAGS@ -CXXCPP = @CXXCPP@ -# Both C and C++ compiler -OBJEXT = @OBJEXT@ -# Other -AR = @AR@ -ARFLAGS = @ARFLAGS@ -RANLIB = @RANLIB@ -MV = mv -LN = ln -RM = rm -f -@SET_MAKE@ - -# Programs used by "make install": -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -#### End of system configuration section. #### - -SHELL = /bin/sh - -VPATH = $(srcdir) - -OBJECTS = getopt.$(OBJEXT) getopt1.$(OBJEXT) getline.$(OBJEXT) hash.$(OBJEXT) -CPPFLAGS = -I$(srcdir) - -TARGETLIB = libgp.a - -all : $(TARGETLIB) - -$(TARGETLIB): $(OBJECTS) - $(RM) $@ - $(AR) $(ARFLAGS) $@ $(OBJECTS) - $(RANLIB) $@ - -# Don't use implicit rules, since AIX "make" and OSF/1 "make" don't always -# expand $< correctly in this context. -# -#%.o : %.c -# $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -# -#%.o : %.cc -# $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< - -getopt.o : getopt.c getopt.h - $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/getopt.c - -getopt1.o : getopt1.c getopt.h - $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/getopt1.c - -getline.o : getline.cc getline.h - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/getline.cc - -hash.o : hash.cc hash.h - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/hash.cc - -install : all - -installdirs : - -uninstall : - -check : all - -mostlyclean : clean - -clean : force - $(RM) *~ *.s *.o *.a $(TARGETLIB) core - -distclean : clean - $(RM) config.status config.log config.cache Makefile - -maintainer-clean : distclean - -force : diff --git a/contrib/gperf/lib/configure b/contrib/gperf/lib/configure deleted file mode 100755 index 46f5f720a55e..000000000000 --- a/contrib/gperf/lib/configure +++ /dev/null @@ -1,4593 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61. -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -as_nl=' -' -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# CDPATH. -$as_unset CDPATH - - -if test "x$CONFIG_SHELL" = x; then - if (eval ":") 2>/dev/null; then - as_have_required=yes -else - as_have_required=no -fi - - if test $as_have_required = yes && (eval ": -(as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=\$LINENO - as_lineno_2=\$LINENO - test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && - test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -") 2> /dev/null; then - : -else - as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - case $as_dir in - /*) - for as_base in sh bash ksh sh5; do - as_candidate_shells="$as_candidate_shells $as_dir/$as_base" - done;; - esac -done -IFS=$as_save_IFS - - - for as_shell in $as_candidate_shells $SHELL; do - # Try only shells that exist, to save several forks. - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { ("$as_shell") 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -_ASEOF -}; then - CONFIG_SHELL=$as_shell - as_have_required=yes - if { "$as_shell" 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -(as_func_return () { - (exit $1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = "$1" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test $exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } - -_ASEOF -}; then - break -fi - -fi - - done - - if test "x$CONFIG_SHELL" != x; then - for as_var in BASH_ENV ENV - do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - - if test $as_have_required = no; then - echo This script requires a shell more modern than all the - echo shells that I found on your system. Please install a - echo modern shell, or manually run the script under such a - echo shell if you do have one. - { (exit 1); exit 1; } -fi - - -fi - -fi - - - -(eval "as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0") || { - echo No shell found that supports shell functions. - echo Please tell autoconf@gnu.org about your system, - echo including any error possibly output before this - echo message -} - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - -exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= - -ac_unique_file="hash.cc" -ac_subst_vars='SHELL -PATH_SEPARATOR -PACKAGE_NAME -PACKAGE_TARNAME -PACKAGE_VERSION -PACKAGE_STRING -PACKAGE_BUGREPORT -exec_prefix -prefix -program_transform_name -bindir -sbindir -libexecdir -datarootdir -datadir -sysconfdir -sharedstatedir -localstatedir -includedir -oldincludedir -docdir -infodir -htmldir -dvidir -pdfdir -psdir -libdir -localedir -mandir -DEFS -ECHO_C -ECHO_N -ECHO_T -LIBS -build_alias -host_alias -target_alias -SET_MAKE -CC -CFLAGS -LDFLAGS -CPPFLAGS -ac_ct_CC -EXEEXT -OBJEXT -CPP -CXX -CXXFLAGS -ac_ct_CXX -CXXCPP -RANLIB -INSTALL -INSTALL_PROGRAM -INSTALL_DATA -LIBOBJS -LTLIBOBJS' -ac_subst_files='' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP -CXX -CXXFLAGS -CCC -CXXCPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=\$ac_optarg ;; - - -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } -fi - -# Be sure to have absolute directory names. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; } -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - { echo "$as_me: error: Working directory cannot be determined" >&2 - { (exit 1); exit 1; }; } -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - { echo "$as_me: error: pwd does not report name of working directory" >&2 - { (exit 1); exit 1; }; } - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$0" || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 - { (exit 1); exit 1; }; } - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CXXCPP C++ preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -configure -generated by GNU Autoconf 2.61 - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi -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 $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; - 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - ac_configure_args="$ac_configure_args '$ac_arg'" - ;; - esac - done -done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -n "$CONFIG_SITE"; then - set x "$CONFIG_SITE" -elif test "x$prefix" != xNONE; then - set x "$prefix/share/config.site" "$prefix/etc/config.site" -else - set x "$ac_default_prefix/share/config.site" \ - "$ac_default_prefix/etc/config.site" -fi -shift -for ac_site_file -do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -fi - - - - - - - - - - - - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } -set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - SET_MAKE= -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -# -# List of possible output files, starting from the most likely. -# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) -# only as a last resort. b.out is created by i960 compilers. -ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' -# -# The IRIX 6 linker writes into existing files which may not be -# executable, retaining their permissions. Remove them first so a -# subsequent execution test works. -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { (ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi - -{ echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6; } -if test -z "$ac_file"; then - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } -fi - -ac_exeext=$ac_cv_exeext - -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - -rm -f a.out a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6; } - -{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest$ac_cv_exeext -{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } -GCC=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_c89=$ac_arg -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6; } ;; - xno) - { echo "$as_me:$LINENO: result: unsupported" >&5 -echo "${ECHO_T}unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; -esac - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { echo "$as_me:$LINENO: result: $CXX" >&5 -echo "${ECHO_T}$CXX" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 -echo "${ECHO_T}$ac_ct_CXX" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C++ compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } -GXX=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 -echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cxx_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CXXFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 -echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } -if test -z "$CXXCPP"; then - if test "${ac_cv_prog_CXXCPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ echo "$as_me:$LINENO: result: $CXXCPP" >&5 -echo "${ECHO_T}$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - - # Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# ./install, which can be erroneously created by make from ./install.sh. -{ echo "$as_me:$LINENO: checking for a BSD compatible install" >&5 -echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6; } -if test -z "$INSTALL"; then -if test "${cl_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - for ac_prog in ginstall installbsd scoinst install; do - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - # OSF/1 installbsd also uses dspmsg, but is usable. - : - else - if test $ac_prog = installbsd && - grep src/bos $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX installbsd doesn't work without option "-g". - : - else - cl_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - fi - done - ;; - esac - done - IFS="$ac_save_ifs" - # As a last resort, use cp. - test -z "$cl_cv_path_install" && cl_cv_path_install="cp" - -fi - INSTALL="$cl_cv_path_install" -fi -{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6; } -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='$(INSTALL)' -if test -z "$INSTALL_DATA"; then - case "$INSTALL" in - cp | */cp ) INSTALL_DATA='$(INSTALL)' ;; - * ) INSTALL_DATA='$(INSTALL) -m 644' ;; - esac -fi - - ac_config_files="$ac_config_files Makefile" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${CONFIG_STATUS=./config.status} -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -as_nl=' -' -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# CDPATH. -$as_unset CDPATH - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 - -# Save the log message, to keep $[0] and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF -# Files that config.status was made for. -config_files="$ac_config_files" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.61, - with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - -Copyright (C) 2006 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - echo "$ac_cs_version"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) { echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; - - *) ac_config_targets="$ac_config_targets $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -if \$ac_cs_recheck; then - echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - CONFIG_SHELL=$SHELL - export CONFIG_SHELL - exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -# -# Set up the sed scripts for CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "$CONFIG_FILES"; then - -_ACEOF - - - -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -SHELL!$SHELL$ac_delim -PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim -PACKAGE_NAME!$PACKAGE_NAME$ac_delim -PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim -PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim -PACKAGE_STRING!$PACKAGE_STRING$ac_delim -PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim -exec_prefix!$exec_prefix$ac_delim -prefix!$prefix$ac_delim -program_transform_name!$program_transform_name$ac_delim -bindir!$bindir$ac_delim -sbindir!$sbindir$ac_delim -libexecdir!$libexecdir$ac_delim -datarootdir!$datarootdir$ac_delim -datadir!$datadir$ac_delim -sysconfdir!$sysconfdir$ac_delim -sharedstatedir!$sharedstatedir$ac_delim -localstatedir!$localstatedir$ac_delim -includedir!$includedir$ac_delim -oldincludedir!$oldincludedir$ac_delim -docdir!$docdir$ac_delim -infodir!$infodir$ac_delim -htmldir!$htmldir$ac_delim -dvidir!$dvidir$ac_delim -pdfdir!$pdfdir$ac_delim -psdir!$psdir$ac_delim -libdir!$libdir$ac_delim -localedir!$localedir$ac_delim -mandir!$mandir$ac_delim -DEFS!$DEFS$ac_delim -ECHO_C!$ECHO_C$ac_delim -ECHO_N!$ECHO_N$ac_delim -ECHO_T!$ECHO_T$ac_delim -LIBS!$LIBS$ac_delim -build_alias!$build_alias$ac_delim -host_alias!$host_alias$ac_delim -target_alias!$target_alias$ac_delim -SET_MAKE!$SET_MAKE$ac_delim -CC!$CC$ac_delim -CFLAGS!$CFLAGS$ac_delim -LDFLAGS!$LDFLAGS$ac_delim -CPPFLAGS!$CPPFLAGS$ac_delim -ac_ct_CC!$ac_ct_CC$ac_delim -EXEEXT!$EXEEXT$ac_delim -OBJEXT!$OBJEXT$ac_delim -CPP!$CPP$ac_delim -CXX!$CXX$ac_delim -CXXFLAGS!$CXXFLAGS$ac_delim -ac_ct_CXX!$ac_ct_CXX$ac_delim -CXXCPP!$CXXCPP$ac_delim -RANLIB!$RANLIB$ac_delim -INSTALL!$INSTALL$ac_delim -INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim -INSTALL_DATA!$INSTALL_DATA$ac_delim -LIBOBJS!$LIBOBJS$ac_delim -LTLIBOBJS!$LTLIBOBJS$ac_delim -_ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 56; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi - -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -:end -s/|#_!!_#|//g -CEOF$ac_eof -_ACEOF - - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF -fi # test -n "$CONFIG_FILES" - - -for ac_tag in :F $CONFIG_FILES -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 -echo "$as_me: error: Invalid tag $ac_tag." >&2;} - { (exit 1); exit 1; }; };; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -echo "$as_me: error: cannot find input file: $ac_f" >&2;} - { (exit 1); exit 1; }; };; - esac - ac_file_inputs="$ac_file_inputs $ac_f" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input="Generated from "`IFS=: - echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - fi - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin";; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir="$ac_dir" - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= - -case `sed -n '/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p -' $ac_file_inputs` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s&@configure_input@&$configure_input&;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -$ac_datarootdir_hack -" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out"; rm -f "$tmp/out";; - *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; - esac - ;; - - - - esac - -done # for ac_tag - - -{ (exit 0); exit 0; } -_ACEOF -chmod +x $CONFIG_STATUS -ac_clean_files=$ac_clean_files_save - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } -fi - diff --git a/contrib/gperf/lib/configure.ac b/contrib/gperf/lib/configure.ac deleted file mode 100644 index 8db581a06ba0..000000000000 --- a/contrib/gperf/lib/configure.ac +++ /dev/null @@ -1,45 +0,0 @@ -dnl autoconf configuration for gperf/lib - -dnl Copyright (C) 1998, 2002, 2005, 2007 Free Software Foundation, Inc. -dnl Written by Douglas C. Schmidt -dnl and Bruno Haible . -dnl -dnl This file is part of GNU GPERF. -dnl -dnl GNU GPERF is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 2, or (at your option) -dnl any later version. -dnl -dnl GNU GPERF is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program; see the file COPYING. -dnl If not, write to the Free Software Foundation, Inc., -dnl 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -AC_PREREQ([2.60]) -AC_INIT(hash.cc) -AC_PROG_MAKE_SET -dnl -dnl checks for programs -dnl -AC_PROG_CC - dnl sets variable CC -AC_PROG_CPP - dnl sets variable CPP -AC_PROG_CXX - dnl sets variable CXX -AC_PROG_CXXCPP - dnl sets variable CXXCPP -AC_PROG_RANLIB - dnl sets variable RANLIB -CL_PROG_INSTALL - dnl sets variables INSTALL, INSTALL_DATA, INSTALL_PROGRAM -dnl -dnl That's it. -dnl -AC_OUTPUT(Makefile) diff --git a/contrib/gperf/lib/getline.cc b/contrib/gperf/lib/getline.cc deleted file mode 100644 index 859e388e6749..000000000000 --- a/contrib/gperf/lib/getline.cc +++ /dev/null @@ -1,119 +0,0 @@ -/* getline.c -- Replacement for GNU C library function getline - -Copyright (C) 1993, 1996, 2001-2002 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -USA. */ - -/* Written by Jan Brittenson, bson@gnu.ai.mit.edu. */ - -/* Specification. */ -#include "getline.h" - -#include -#include -#include -#include - -/* Always add at least this many bytes when extending the buffer. */ -#define MIN_CHUNK 64 - -/* Reads up to (and including) a TERMINATOR from STREAM into *LINEPTR + OFFSET - (and null-terminate it). *LINEPTR is a pointer returned from new [] (or - NULL), pointing to *N characters of space. It is realloc'd as - necessary. Returns the number of characters read (not including the - null terminator), or -1 on error or immediate EOF. - NOTE: There is another getstr() function declared in . */ - -static int -getstr (char **lineptr, size_t *n, FILE *stream, char terminator, size_t offset) -{ - size_t nchars_avail; /* Allocated but unused chars in *LINEPTR. */ - char *read_pos; /* Where we're reading into *LINEPTR. */ - - if (!lineptr || !n || !stream) - return -1; - - if (!*lineptr) - { - *n = MIN_CHUNK; - *lineptr = new char[*n]; - } - - nchars_avail = *n - offset; - read_pos = *lineptr + offset; - - for (;;) - { - int c = getc (stream); - - /* We always want at least one char left in the buffer, since we - always (unless we get an error while reading the first char) - NUL-terminate the line buffer. */ - - assert (*n - nchars_avail == (size_t) (read_pos - *lineptr)); - if (nchars_avail < 2) - { - if (*n > MIN_CHUNK) - *n *= 2; - else - *n += MIN_CHUNK; - - nchars_avail = *n + *lineptr - read_pos; - char *new_line = new char[*n]; - if (*lineptr) - { - memcpy (new_line, *lineptr, read_pos - *lineptr); - delete[] *lineptr; - } - *lineptr = new_line; - read_pos = *n - nchars_avail + *lineptr; - assert (*n - nchars_avail == (size_t) (read_pos - *lineptr)); - } - - if (c == EOF || ferror (stream)) - { - /* Return partial line, if any. */ - if (read_pos == *lineptr) - return -1; - else - break; - } - - *read_pos++ = c; - nchars_avail--; - - if (c == terminator) - /* Return the line. */ - break; - } - - /* Done - NUL terminate and return the number of chars read. */ - *read_pos = '\0'; - - return read_pos - (*lineptr + offset); -} - -int -get_line (char **lineptr, size_t *n, FILE *stream) -{ - return getstr (lineptr, n, stream, '\n', 0); -} - -int -get_delim (char **lineptr, size_t *n, int delimiter, FILE *stream) -{ - return getstr (lineptr, n, stream, delimiter, 0); -} diff --git a/contrib/gperf/lib/getline.h b/contrib/gperf/lib/getline.h deleted file mode 100644 index 4456aa542fe3..000000000000 --- a/contrib/gperf/lib/getline.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1995, 2000-2002 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -USA. */ - -#ifndef GETLINE_H_ -# define GETLINE_H_ 1 - -# include -# include - -/* Like the glibc functions get_line and get_delim, except that the result - must be freed using delete[], not free(). */ - -/* Reads up to (and including) a newline from STREAM into *LINEPTR - (and null-terminate it). *LINEPTR is a pointer returned from new [] (or - NULL), pointing to *N characters of space. It is realloc'd as - necessary. Returns the number of characters read (not including the - null terminator), or -1 on error or immediate EOF. */ -extern int get_line (char **lineptr, size_t *n, FILE *stream); - -/* Reads up to (and including) a DELIMITER from STREAM into *LINEPTR - (and null-terminate it). *LINEPTR is a pointer returned from new [] (or - NULL), pointing to *N characters of space. It is realloc'd as - necessary. Returns the number of characters read (not including the - null terminator), or -1 on error or immediate EOF. */ -extern int get_delim (char **lineptr, size_t *n, int delimiter, FILE *stream); - -#endif /* not GETLINE_H_ */ diff --git a/contrib/gperf/lib/hash.cc b/contrib/gperf/lib/hash.cc deleted file mode 100644 index 1795cee81c18..000000000000 --- a/contrib/gperf/lib/hash.cc +++ /dev/null @@ -1,27 +0,0 @@ -/* -Copyright (C) 1990, 2000, 2002 Free Software Foundation - written by Doug Lea -*/ - -#include - -/* - Some useful hash function. - It's not a particularly good hash function (<< 5 would be better than << 4), - but people believe in it because it comes from Dragon book. -*/ - -unsigned int -hashpjw (const unsigned char *x, unsigned int len) // From Dragon book, p436 -{ - unsigned int h = 0; - unsigned int g; - - for (; len > 0; len--) - { - h = (h << 4) + *x++; - if ((g = h & 0xf0000000) != 0) - h = (h ^ (g >> 24)) ^ g; - } - return h; -} diff --git a/contrib/gperf/lib/hash.h b/contrib/gperf/lib/hash.h deleted file mode 100644 index d202e723ad09..000000000000 --- a/contrib/gperf/lib/hash.h +++ /dev/null @@ -1,15 +0,0 @@ -// This may look like C code, but it is really -*- C++ -*- - -/* -Copyright (C) 1988, 1992, 2000, 2002 Free Software Foundation - written by Doug Lea -*/ - -#ifndef _hash_h -#define _hash_h 1 - -/* a hash function for char[] arrays using the - method described in Aho, Sethi, & Ullman, p 436. */ -extern unsigned int hashpjw (const unsigned char *string, unsigned int len); - -#endif diff --git a/contrib/gperf/mkinstalldirs b/contrib/gperf/mkinstalldirs deleted file mode 100755 index 4f58503ea4e0..000000000000 --- a/contrib/gperf/mkinstalldirs +++ /dev/null @@ -1,40 +0,0 @@ -#! /bin/sh -# mkinstalldirs --- make directory hierarchy -# Author: Noah Friedman -# Created: 1993-05-16 -# Public domain - -# $Id: mkinstalldirs,v 1.13 1999/01/05 03:18:55 bje Exp $ - -errstatus=0 - -for file -do - set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` - shift - - pathcomp= - for d - do - pathcomp="$pathcomp$d" - case "$pathcomp" in - -* ) pathcomp=./$pathcomp ;; - esac - - if test ! -d "$pathcomp"; then - echo "mkdir $pathcomp" - - mkdir "$pathcomp" || lasterr=$? - - if test ! -d "$pathcomp"; then - errstatus=$lasterr - fi - fi - - pathcomp="$pathcomp/" - done -done - -exit $errstatus - -# mkinstalldirs ends here diff --git a/contrib/gperf/src/Makefile.in b/contrib/gperf/src/Makefile.in deleted file mode 100644 index 19defc482c70..000000000000 --- a/contrib/gperf/src/Makefile.in +++ /dev/null @@ -1,145 +0,0 @@ -# Makefile for gperf/src - -# Copyright (C) 1989, 1992, 1993, 1998, 2000, 2002, 2006 Free Software Foundation, Inc. -# Written by Douglas C. Schmidt -# and Bruno Haible . -# -# This file is part of GNU GPERF. -# -# GNU GPERF is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU GPERF is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; see the file COPYING. -# If not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -#### Start of system configuration section. #### - -# Directories used by "make": -srcdir = @srcdir@ - -# Directories used by "make install": -prefix = @prefix@ -local_prefix = /usr/local -exec_prefix = @exec_prefix@ -bindir = @bindir@ - -# Programs used by "make": -# C compiler -CC = @CC@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -# C++ compiler -CXX = @CXX@ -CXXFLAGS = @CXXFLAGS@ -CXXCPP = @CXXCPP@ -# Both C and C++ compiler -LDFLAGS = @LDFLAGS@ -OBJEXT = @OBJEXT@ -EXEEXT = @EXEEXT@ -# Other -MV = mv -LN = ln -RM = rm -f -@SET_MAKE@ - -# Programs used by "make install": -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -MKINSTALLDIRS = $(SHELL) $(srcdir)/../mkinstalldirs - -#### End of system configuration section. #### - -SHELL = /bin/sh - -VPATH = $(srcdir) - -OBJECTS = version.$(OBJEXT) positions.$(OBJEXT) options.$(OBJEXT) keyword.$(OBJEXT) keyword-list.$(OBJEXT) \ - input.$(OBJEXT) bool-array.$(OBJEXT) hash-table.$(OBJEXT) search.$(OBJEXT) output.$(OBJEXT) main.$(OBJEXT) -LIBS = ../lib/libgp.a @GPERF_LIBM@ -CPPFLAGS = -I. -I$(srcdir)/../lib - -TARGETPROG = gperf$(EXEEXT) - -all : $(TARGETPROG) - -$(TARGETPROG): $(OBJECTS) - $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBS) - -# Don't use implicit rules, since AIX "make" and OSF/1 "make" don't always -# expand $< correctly in this context. -# -#%.o : %.c -# $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -# -#%.o : %.cc -# $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< - -# Dependencies. -CONFIG_H = config.h -VERSION_H = version.h -POSITIONS_H = positions.h positions.icc -OPTIONS_H = options.h options.icc $(POSITIONS_H) -KEYWORD_H = keyword.h keyword.icc -KEYWORD_LIST_H = keyword-list.h keyword-list.icc $(KEYWORD_H) -INPUT_H = input.h $(KEYWORD_LIST_H) -BOOL_ARRAY_H = bool-array.h bool-array.icc $(OPTIONS_H) -HASH_TABLE_H = hash-table.h $(KEYWORD_H) -SEARCH_H = search.h $(KEYWORD_LIST_H) $(POSITIONS_H) $(BOOL_ARRAY_H) -OUTPUT_H = output.h $(KEYWORD_LIST_H) $(POSITIONS_H) - -version.$(OBJEXT): version.cc $(VERSION_H) - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/version.cc -positions.$(OBJEXT): positions.cc $(POSITIONS_H) - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/positions.cc -options.$(OBJEXT): options.cc $(OPTIONS_H) $(VERSION_H) - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/options.cc -keyword.$(OBJEXT): keyword.cc $(KEYWORD_H) $(POSITIONS_H) - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/keyword.cc -keyword-list.$(OBJEXT): keyword-list.cc $(KEYWORD_LIST_H) - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/keyword-list.cc -input.$(OBJEXT): input.cc $(INPUT_H) $(OPTIONS_H) - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/input.cc -bool-array.$(OBJEXT): bool-array.cc $(BOOL_ARRAY_H) $(OPTIONS_H) - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/bool-array.cc -hash-table.$(OBJEXT): hash-table.cc $(HASH_TABLE_H) $(OPTIONS_H) - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/hash-table.cc -search.$(OBJEXT): search.cc $(SEARCH_H) $(OPTIONS_H) $(HASH_TABLE_H) $(CONFIG_H) - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/search.cc -output.$(OBJEXT): output.cc $(OUTPUT_H) $(OPTIONS_H) $(VERSION_H) - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/output.cc -main.$(OBJEXT): main.cc $(OPTIONS_H) $(INPUT_H) $(SEARCH_H) $(OUTPUT_H) - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(srcdir)/main.cc - -install : all force - $(MKINSTALLDIRS) $(DESTDIR)$(bindir) - $(INSTALL_PROGRAM) $(TARGETPROG) $(DESTDIR)$(bindir)/$(TARGETPROG) - -installdirs : force - $(MKINSTALLDIRS) $(DESTDIR)$(bindir) - -uninstall : force - $(RM) $(DESTDIR)$(bindir)/$(TARGETPROG) - -check : all - -mostlyclean : clean - -clean : force - $(RM) *~ *.s *.$(OBJEXT) *.a $(TARGETPROG) core - -distclean : clean - $(RM) config.status config.log config.cache Makefile config.h - -maintainer-clean : distclean - -force : diff --git a/contrib/gperf/src/bool-array.cc b/contrib/gperf/src/bool-array.cc deleted file mode 100644 index ca3c50149afd..000000000000 --- a/contrib/gperf/src/bool-array.cc +++ /dev/null @@ -1,47 +0,0 @@ -/* Fast lookup table abstraction implemented as an Iteration Number Array - Copyright (C) 1989-1998, 2002 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Specification. */ -#include "bool-array.h" - -#include -#include -#include "options.h" - -/* Frees this object. */ -Bool_Array::~Bool_Array () -{ - /* Print out debugging diagnostics. */ - if (option[DEBUG]) - fprintf (stderr, "\ndumping boolean array information\n" - "size = %d\niteration number = %d\nend of array dump\n", - _size, _iteration_number); - delete[] const_cast(_storage_array); -} - -#ifndef __OPTIMIZE__ - -#define INLINE /* not inline */ -#include "bool-array.icc" -#undef INLINE - -#endif /* not defined __OPTIMIZE__ */ diff --git a/contrib/gperf/src/bool-array.h b/contrib/gperf/src/bool-array.h deleted file mode 100644 index ddfbd869b501..000000000000 --- a/contrib/gperf/src/bool-array.h +++ /dev/null @@ -1,79 +0,0 @@ -/* This may look like C code, but it is really -*- C++ -*- */ - -/* Simple lookup table abstraction implemented as an Iteration Number Array. - - Copyright (C) 1989-1998, 2002 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef bool_array_h -#define bool_array_h 1 - -/* A Bool_Array instance is a bit array of fixed size, optimized for being - filled sparsely and cleared frequently. For example, when processing - tests/chill.gperf, the array will be: - - of size 15391, - - clear will be called 3509 times, - - set_bit will be called 300394 times. - With a conventional bit array implementation, clear would be too slow. - With a tree/hash based bit array implementation, set_bit would be slower. */ - -class Bool_Array -{ -public: - /* Initializes the bit array with room for SIZE bits, numbered from - 0 to SIZE-1. */ - Bool_Array (unsigned int size); - - /* Frees this object. */ - ~Bool_Array (); - - /* Resets all bits to zero. */ - void clear (); - - /* Sets the specified bit to true. - Returns its previous value (false or true). */ - bool set_bit (unsigned int index); - -private: - /* Size of array. */ - unsigned int const _size; - - /* Current iteration number. Always nonzero. Starts out as 1, and is - incremented each time clear() is called. */ - unsigned int _iteration_number; - - /* For each index, we store in storage_array[index] the iteration_number at - the time set_bit(index) was last called. */ - unsigned int * const _storage_array; -}; - -#ifdef __OPTIMIZE__ /* efficiency hack! */ - -#include -#include -#include "options.h" -#define INLINE inline -#include "bool-array.icc" -#undef INLINE - -#endif - -#endif diff --git a/contrib/gperf/src/bool-array.icc b/contrib/gperf/src/bool-array.icc deleted file mode 100644 index fba4a31ace8b..000000000000 --- a/contrib/gperf/src/bool-array.icc +++ /dev/null @@ -1,78 +0,0 @@ -/* Inline Functions for bool-array.{h,cc}. - - Copyright (C) 1989-1998, 2002 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -// This needs: -//#include -//#include -//#include "options.h" - -/* Initializes the bit array with room for SIZE bits, numbered from - 0 to SIZE-1. */ -INLINE -Bool_Array::Bool_Array (unsigned int size) - : _size (size), - _iteration_number (1), - _storage_array (new unsigned int [size]) -{ - memset (_storage_array, 0, size * sizeof (_storage_array[0])); - if (option[DEBUG]) - fprintf (stderr, "\nbool array size = %d, total bytes = %d\n", - _size, - static_cast (_size * sizeof (_storage_array[0]))); -} - -/* Sets the specified bit to true. - Returns its previous value (false or true). */ -INLINE bool -Bool_Array::set_bit (unsigned int index) -{ - if (_storage_array[index] == _iteration_number) - /* The bit was set since the last clear() call. */ - return true; - else - { - /* The last operation on this bit was clear(). Set it now. */ - _storage_array[index] = _iteration_number; - return false; - } -} - -/* Resets all bits to zero. */ -INLINE void -Bool_Array::clear () -{ - /* If we wrap around it's time to zero things out again! However, this only - occurs once about every 2^32 iterations, so it will not happen more - frequently than once per second. */ - - if (++_iteration_number == 0) - { - _iteration_number = 1; - memset (_storage_array, 0, _size * sizeof (_storage_array[0])); - if (option[DEBUG]) - { - fprintf (stderr, "(re-initialized bool_array)\n"); - fflush (stderr); - } - } -} diff --git a/contrib/gperf/src/config.h.in b/contrib/gperf/src/config.h.in deleted file mode 100644 index 1f3dc586b572..000000000000 --- a/contrib/gperf/src/config.h.in +++ /dev/null @@ -1,20 +0,0 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define if the C++ compiler supports stack-allocated variable-size arrays. - */ -#undef HAVE_DYNAMIC_ARRAY - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION diff --git a/contrib/gperf/src/config.h_vms b/contrib/gperf/src/config.h_vms deleted file mode 100644 index 1f3dc586b572..000000000000 --- a/contrib/gperf/src/config.h_vms +++ /dev/null @@ -1,20 +0,0 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define if the C++ compiler supports stack-allocated variable-size arrays. - */ -#undef HAVE_DYNAMIC_ARRAY - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION diff --git a/contrib/gperf/src/configure b/contrib/gperf/src/configure deleted file mode 100755 index ab7048103e08..000000000000 --- a/contrib/gperf/src/configure +++ /dev/null @@ -1,4725 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61. -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -as_nl=' -' -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# CDPATH. -$as_unset CDPATH - - -if test "x$CONFIG_SHELL" = x; then - if (eval ":") 2>/dev/null; then - as_have_required=yes -else - as_have_required=no -fi - - if test $as_have_required = yes && (eval ": -(as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=\$LINENO - as_lineno_2=\$LINENO - test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && - test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -") 2> /dev/null; then - : -else - as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - case $as_dir in - /*) - for as_base in sh bash ksh sh5; do - as_candidate_shells="$as_candidate_shells $as_dir/$as_base" - done;; - esac -done -IFS=$as_save_IFS - - - for as_shell in $as_candidate_shells $SHELL; do - # Try only shells that exist, to save several forks. - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { ("$as_shell") 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -_ASEOF -}; then - CONFIG_SHELL=$as_shell - as_have_required=yes - if { "$as_shell" 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -(as_func_return () { - (exit $1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = "$1" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test $exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } - -_ASEOF -}; then - break -fi - -fi - - done - - if test "x$CONFIG_SHELL" != x; then - for as_var in BASH_ENV ENV - do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - - if test $as_have_required = no; then - echo This script requires a shell more modern than all the - echo shells that I found on your system. Please install a - echo modern shell, or manually run the script under such a - echo shell if you do have one. - { (exit 1); exit 1; } -fi - - -fi - -fi - - - -(eval "as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0") || { - echo No shell found that supports shell functions. - echo Please tell autoconf@gnu.org about your system, - echo including any error possibly output before this - echo message -} - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - -exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= - -ac_unique_file="main.cc" -ac_subst_vars='SHELL -PATH_SEPARATOR -PACKAGE_NAME -PACKAGE_TARNAME -PACKAGE_VERSION -PACKAGE_STRING -PACKAGE_BUGREPORT -exec_prefix -prefix -program_transform_name -bindir -sbindir -libexecdir -datarootdir -datadir -sysconfdir -sharedstatedir -localstatedir -includedir -oldincludedir -docdir -infodir -htmldir -dvidir -pdfdir -psdir -libdir -localedir -mandir -DEFS -ECHO_C -ECHO_N -ECHO_T -LIBS -build_alias -host_alias -target_alias -SET_MAKE -CC -CFLAGS -LDFLAGS -CPPFLAGS -ac_ct_CC -EXEEXT -OBJEXT -CPP -CXX -CXXFLAGS -ac_ct_CXX -CXXCPP -INSTALL -INSTALL_PROGRAM -INSTALL_DATA -GPERF_LIBM -LIBOBJS -LTLIBOBJS' -ac_subst_files='' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP -CXX -CXXFLAGS -CCC -CXXCPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=\$ac_optarg ;; - - -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } -fi - -# Be sure to have absolute directory names. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; } -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - { echo "$as_me: error: Working directory cannot be determined" >&2 - { (exit 1); exit 1; }; } -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - { echo "$as_me: error: pwd does not report name of working directory" >&2 - { (exit 1); exit 1; }; } - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$0" || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 - { (exit 1); exit 1; }; } - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CXXCPP C++ preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -configure -generated by GNU Autoconf 2.61 - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi -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 $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; - 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - ac_configure_args="$ac_configure_args '$ac_arg'" - ;; - esac - done -done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -n "$CONFIG_SITE"; then - set x "$CONFIG_SITE" -elif test "x$prefix" != xNONE; then - set x "$prefix/share/config.site" "$prefix/etc/config.site" -else - set x "$ac_default_prefix/share/config.site" \ - "$ac_default_prefix/etc/config.site" -fi -shift -for ac_site_file -do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -fi - - - - - - - - - - - - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_config_headers="$ac_config_headers config.h" - -{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } -set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - SET_MAKE= -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -# -# List of possible output files, starting from the most likely. -# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) -# only as a last resort. b.out is created by i960 compilers. -ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' -# -# The IRIX 6 linker writes into existing files which may not be -# executable, retaining their permissions. Remove them first so a -# subsequent execution test works. -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { (ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi - -{ echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6; } -if test -z "$ac_file"; then - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } -fi - -ac_exeext=$ac_cv_exeext - -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - -rm -f a.out a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6; } - -{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest$ac_cv_exeext -{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } -GCC=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_c89=$ac_arg -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6; } ;; - xno) - { echo "$as_me:$LINENO: result: unsupported" >&5 -echo "${ECHO_T}unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; -esac - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { echo "$as_me:$LINENO: result: $CXX" >&5 -echo "${ECHO_T}$CXX" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 -echo "${ECHO_T}$ac_ct_CXX" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C++ compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } -GXX=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 -echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cxx_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CXXFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 -echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } -if test -z "$CXXCPP"; then - if test "${ac_cv_prog_CXXCPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ echo "$as_me:$LINENO: result: $CXXCPP" >&5 -echo "${ECHO_T}$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - # Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# ./install, which can be erroneously created by make from ./install.sh. -{ echo "$as_me:$LINENO: checking for a BSD compatible install" >&5 -echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6; } -if test -z "$INSTALL"; then -if test "${cl_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - for ac_prog in ginstall installbsd scoinst install; do - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - # OSF/1 installbsd also uses dspmsg, but is usable. - : - else - if test $ac_prog = installbsd && - grep src/bos $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX installbsd doesn't work without option "-g". - : - else - cl_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - fi - done - ;; - esac - done - IFS="$ac_save_ifs" - # As a last resort, use cp. - test -z "$cl_cv_path_install" && cl_cv_path_install="cp" - -fi - INSTALL="$cl_cv_path_install" -fi -{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6; } -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='$(INSTALL)' -if test -z "$INSTALL_DATA"; then - case "$INSTALL" in - cp | */cp ) INSTALL_DATA='$(INSTALL)' ;; - * ) INSTALL_DATA='$(INSTALL) -m 644' ;; - esac -fi - - { echo "$as_me:$LINENO: checking for stack-allocated variable-size arrays" >&5 -echo $ECHO_N "checking for stack-allocated variable-size arrays... $ECHO_C" >&6; } - -if test "${gp_cv_cxx_dynamic_array+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -int func (int n) { int dynamic_array[n]; } -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - gp_cv_cxx_dynamic_array=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - gp_cv_cxx_dynamic_array=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -fi - -{ echo "$as_me:$LINENO: result: $gp_cv_cxx_dynamic_array" >&5 -echo "${ECHO_T}$gp_cv_cxx_dynamic_array" >&6; } -if test $gp_cv_cxx_dynamic_array = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_DYNAMIC_ARRAY 1 -_ACEOF - -fi - -{ echo "$as_me:$LINENO: checking for rand in -lm" >&5 -echo $ECHO_N "checking for rand in -lm... $ECHO_C" >&6; } -if test "${ac_cv_lib_m_rand+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char rand (); -int -main () -{ -return rand (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_m_rand=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_m_rand=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_rand" >&5 -echo "${ECHO_T}$ac_cv_lib_m_rand" >&6; } -if test $ac_cv_lib_m_rand = yes; then - GPERF_LIBM="-lm" -else - GPERF_LIBM="" -fi - - -ac_config_files="$ac_config_files Makefile" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${CONFIG_STATUS=./config.status} -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -as_nl=' -' -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# CDPATH. -$as_unset CDPATH - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 - -# Save the log message, to keep $[0] and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.61, - with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - -Copyright (C) 2006 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - echo "$ac_cs_version"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - { echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) { echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; - - *) ac_config_targets="$ac_config_targets $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -if \$ac_cs_recheck; then - echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - CONFIG_SHELL=$SHELL - export CONFIG_SHELL - exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -# -# Set up the sed scripts for CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "$CONFIG_FILES"; then - -_ACEOF - - - -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -SHELL!$SHELL$ac_delim -PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim -PACKAGE_NAME!$PACKAGE_NAME$ac_delim -PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim -PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim -PACKAGE_STRING!$PACKAGE_STRING$ac_delim -PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim -exec_prefix!$exec_prefix$ac_delim -prefix!$prefix$ac_delim -program_transform_name!$program_transform_name$ac_delim -bindir!$bindir$ac_delim -sbindir!$sbindir$ac_delim -libexecdir!$libexecdir$ac_delim -datarootdir!$datarootdir$ac_delim -datadir!$datadir$ac_delim -sysconfdir!$sysconfdir$ac_delim -sharedstatedir!$sharedstatedir$ac_delim -localstatedir!$localstatedir$ac_delim -includedir!$includedir$ac_delim -oldincludedir!$oldincludedir$ac_delim -docdir!$docdir$ac_delim -infodir!$infodir$ac_delim -htmldir!$htmldir$ac_delim -dvidir!$dvidir$ac_delim -pdfdir!$pdfdir$ac_delim -psdir!$psdir$ac_delim -libdir!$libdir$ac_delim -localedir!$localedir$ac_delim -mandir!$mandir$ac_delim -DEFS!$DEFS$ac_delim -ECHO_C!$ECHO_C$ac_delim -ECHO_N!$ECHO_N$ac_delim -ECHO_T!$ECHO_T$ac_delim -LIBS!$LIBS$ac_delim -build_alias!$build_alias$ac_delim -host_alias!$host_alias$ac_delim -target_alias!$target_alias$ac_delim -SET_MAKE!$SET_MAKE$ac_delim -CC!$CC$ac_delim -CFLAGS!$CFLAGS$ac_delim -LDFLAGS!$LDFLAGS$ac_delim -CPPFLAGS!$CPPFLAGS$ac_delim -ac_ct_CC!$ac_ct_CC$ac_delim -EXEEXT!$EXEEXT$ac_delim -OBJEXT!$OBJEXT$ac_delim -CPP!$CPP$ac_delim -CXX!$CXX$ac_delim -CXXFLAGS!$CXXFLAGS$ac_delim -ac_ct_CXX!$ac_ct_CXX$ac_delim -CXXCPP!$CXXCPP$ac_delim -INSTALL!$INSTALL$ac_delim -INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim -INSTALL_DATA!$INSTALL_DATA$ac_delim -GPERF_LIBM!$GPERF_LIBM$ac_delim -LIBOBJS!$LIBOBJS$ac_delim -LTLIBOBJS!$LTLIBOBJS$ac_delim -_ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 56; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi - -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -:end -s/|#_!!_#|//g -CEOF$ac_eof -_ACEOF - - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF -fi # test -n "$CONFIG_FILES" - - -for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 -echo "$as_me: error: Invalid tag $ac_tag." >&2;} - { (exit 1); exit 1; }; };; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -echo "$as_me: error: cannot find input file: $ac_f" >&2;} - { (exit 1); exit 1; }; };; - esac - ac_file_inputs="$ac_file_inputs $ac_f" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input="Generated from "`IFS=: - echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - fi - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin";; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir="$ac_dir" - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= - -case `sed -n '/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p -' $ac_file_inputs` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s&@configure_input@&$configure_input&;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -$ac_datarootdir_hack -" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out"; rm -f "$tmp/out";; - *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; - esac - ;; - :H) - # - # CONFIG_HEADER - # -_ACEOF - -# Transform confdefs.h into a sed script `conftest.defines', that -# substitutes the proper values into config.h.in to produce config.h. -rm -f conftest.defines conftest.tail -# First, append a space to every undef/define line, to ease matching. -echo 's/$/ /' >conftest.defines -# Then, protect against being on the right side of a sed subst, or in -# an unquoted here document, in config.status. If some macros were -# called several times there might be several #defines for the same -# symbol, which is useless. But do not sort them, since the last -# AC_DEFINE must be honored. -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where -# NAME is the cpp macro being defined, VALUE is the value it is being given. -# PARAMS is the parameter list in the macro definition--in most cases, it's -# just an empty string. -ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' -ac_dB='\\)[ (].*,\\1define\\2' -ac_dC=' ' -ac_dD=' ,' - -uniq confdefs.h | - sed -n ' - t rset - :rset - s/^[ ]*#[ ]*define[ ][ ]*// - t ok - d - :ok - s/[\\&,]/\\&/g - s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p - s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p - ' >>conftest.defines - -# Remove the space that was appended to ease matching. -# Then replace #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -# (The regexp can be short, since the line contains either #define or #undef.) -echo 's/ $// -s,^[ #]*u.*,/* & */,' >>conftest.defines - -# Break up conftest.defines: -ac_max_sed_lines=50 - -# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" -# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" -# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" -# et cetera. -ac_in='$ac_file_inputs' -ac_out='"$tmp/out1"' -ac_nxt='"$tmp/out2"' - -while : -do - # Write a here document: - cat >>$CONFIG_STATUS <<_ACEOF - # First, check the format of the line: - cat >"\$tmp/defines.sed" <<\\CEOF -/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def -/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def -b -:def -_ACEOF - sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS - ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in - sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail - grep . conftest.tail >/dev/null || break - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines conftest.tail - -echo "ac_result=$ac_in" >>$CONFIG_STATUS -cat >>$CONFIG_STATUS <<\_ACEOF - if test x"$ac_file" != x-; then - echo "/* $configure_input */" >"$tmp/config.h" - cat "$ac_result" >>"$tmp/config.h" - if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f $ac_file - mv "$tmp/config.h" $ac_file - fi - else - echo "/* $configure_input */" - cat "$ac_result" - fi - rm -f "$tmp/out12" - ;; - - - esac - -done # for ac_tag - - -{ (exit 0); exit 0; } -_ACEOF -chmod +x $CONFIG_STATUS -ac_clean_files=$ac_clean_files_save - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } -fi - diff --git a/contrib/gperf/src/configure.ac b/contrib/gperf/src/configure.ac deleted file mode 100644 index b7b91a0b191e..000000000000 --- a/contrib/gperf/src/configure.ac +++ /dev/null @@ -1,68 +0,0 @@ -dnl autoconf configuration for gperf/src - -dnl Copyright (C) 1998, 2000, 2002-2003, 2007 Free Software Foundation, Inc. -dnl Written by Douglas C. Schmidt -dnl and Bruno Haible . -dnl -dnl This file is part of GNU GPERF. -dnl -dnl GNU GPERF is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 2, or (at your option) -dnl any later version. -dnl -dnl GNU GPERF is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program; see the file COPYING. -dnl If not, write to the Free Software Foundation, Inc., -dnl 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -AC_PREREQ([2.60]) -AC_INIT(main.cc) -AC_CONFIG_HEADER(config.h) -AC_PROG_MAKE_SET -dnl -dnl checks for programs -dnl -AC_PROG_CC - dnl sets variable CC -AC_PROG_CPP - dnl sets variable CPP -AC_PROG_CXX - dnl sets variable CXX -AC_PROG_CXXCPP - dnl sets variable CXXCPP -CL_PROG_INSTALL - dnl sets variables INSTALL, INSTALL_DATA, INSTALL_PROGRAM -dnl -dnl checks for compiler characteristics -dnl -AC_MSG_CHECKING([for stack-allocated variable-size arrays]) -AC_CACHE_VAL(gp_cv_cxx_dynamic_array, [ -AC_LANG_SAVE() -AC_LANG_CPLUSPLUS() -AC_TRY_COMPILE([int func (int n) { int dynamic_array[n]; }], [], -gp_cv_cxx_dynamic_array=yes, gp_cv_cxx_dynamic_array=no) -AC_LANG_RESTORE() -]) -AC_MSG_RESULT($gp_cv_cxx_dynamic_array) -if test $gp_cv_cxx_dynamic_array = yes; then - AC_DEFINE(HAVE_DYNAMIC_ARRAY, 1, - [Define if the C++ compiler supports stack-allocated variable-size arrays.]) -fi -dnl -dnl checks for functions and declarations -dnl -dnl -dnl checks for libraries -dnl -AC_CHECK_LIB(m, rand, GPERF_LIBM="-lm", GPERF_LIBM="") -AC_SUBST(GPERF_LIBM) -dnl -dnl That's it. -dnl -AC_OUTPUT(Makefile) diff --git a/contrib/gperf/src/hash-table.cc b/contrib/gperf/src/hash-table.cc deleted file mode 100644 index d98d90a21109..000000000000 --- a/contrib/gperf/src/hash-table.cc +++ /dev/null @@ -1,167 +0,0 @@ -/* Hash table for checking keyword links. Implemented using double hashing. - Copyright (C) 1989-1998, 2000, 2002 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Specification. */ -#include "hash-table.h" - -#include -#include /* declares memset(), strcmp() */ -#include -#include "options.h" - -/* We use a hash table with double hashing. This is the simplest kind of - hash table, given that we always only insert and never remove entries - from the hash table. */ - -/* To make double hashing efficient, there need to be enough spare entries. */ -static const int size_factor = 10; - -/* We make the size of the hash table a power of 2. This allows for two - optimizations: It eliminates the modulo instruction, and allows for an - easy secondary hashing function. */ - -/* Constructor. */ -Hash_Table::Hash_Table (unsigned int size, bool ignore_length) - : _ignore_length (ignore_length), - _collisions (0) -{ - /* There need to be enough spare entries. */ - size = size * size_factor; - - /* Find smallest power of 2 that is >= size. */ - unsigned int shift = 0; - if ((size >> 16) > 0) - { - size = size >> 16; - shift += 16; - } - if ((size >> 8) > 0) - { - size = size >> 8; - shift += 8; - } - if ((size >> 4) > 0) - { - size = size >> 4; - shift += 4; - } - if ((size >> 2) > 0) - { - size = size >> 2; - shift += 2; - } - if ((size >> 1) > 0) - { - size = size >> 1; - shift += 1; - } - _log_size = shift; - _size = 1 << shift; - - /* Allocate table. */ - _table = new KeywordExt*[_size]; - memset (_table, 0, _size * sizeof (*_table)); -} - -/* Destructor. */ -Hash_Table::~Hash_Table () -{ - delete[] _table; -} - -/* Print the table's contents. */ -void -Hash_Table::dump () const -{ - int field_width; - - field_width = 0; - { - for (int i = _size - 1; i >= 0; i--) - if (_table[i]) - if (field_width < _table[i]->_selchars_length) - field_width = _table[i]->_selchars_length; - } - - fprintf (stderr, - "\ndumping the hash table\n" - "total available table slots = %d, total bytes = %d, total collisions = %d\n" - "location, %*s, keyword\n", - _size, _size * static_cast(sizeof (*_table)), - _collisions, field_width, "keysig"); - - for (int i = _size - 1; i >= 0; i--) - if (_table[i]) - { - fprintf (stderr, "%8d, ", i); - if (field_width > _table[i]->_selchars_length) - fprintf (stderr, "%*s", field_width - _table[i]->_selchars_length, ""); - for (int j = 0; j < _table[i]->_selchars_length; j++) - putc (_table[i]->_selchars[j], stderr); - fprintf (stderr, ", %.*s\n", - _table[i]->_allchars_length, _table[i]->_allchars); - } - - fprintf (stderr, "\nend dumping hash table\n\n"); -} - -/* Compares two items. */ -inline bool -Hash_Table::equal (KeywordExt *item1, KeywordExt *item2) const -{ - return item1->_selchars_length == item2->_selchars_length - && memcmp (item1->_selchars, item2->_selchars, - item2->_selchars_length * sizeof (unsigned int)) - == 0 - && (_ignore_length - || item1->_allchars_length == item2->_allchars_length); -} - -/* Attempts to insert ITEM in the table. If there is already an equal - entry in it, returns it. Otherwise inserts ITEM and returns NULL. */ -KeywordExt * -Hash_Table::insert (KeywordExt *item) -{ - unsigned hash_val = - hashpjw (reinterpret_cast(item->_selchars), - item->_selchars_length * sizeof (unsigned int)); - unsigned int probe = hash_val & (_size - 1); - unsigned int increment = - (((hash_val >> _log_size) - ^ (_ignore_length ? 0 : item->_allchars_length)) - << 1) + 1; - /* Note that because _size is a power of 2 and increment is odd, - we have gcd(increment,_size) = 1, which guarantees that we'll find - an empty entry during the loop. */ - - while (_table[probe] != NULL) - { - if (equal (_table[probe], item)) - return _table[probe]; - - _collisions++; - probe = (probe + increment) & (_size - 1); - } - - _table[probe] = item; - return NULL; -} diff --git a/contrib/gperf/src/hash-table.h b/contrib/gperf/src/hash-table.h deleted file mode 100644 index d6938eb4d1f0..000000000000 --- a/contrib/gperf/src/hash-table.h +++ /dev/null @@ -1,66 +0,0 @@ -/* This may look like C code, but it is really -*- C++ -*- */ - -/* Hash table used to check for duplicate keyword entries. - - Copyright (C) 1989-1998, 2000, 2002 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef hash_table_h -#define hash_table_h 1 - -#include "keyword.h" - -/* Hash table of KeywordExt* entries. - Two entries are considered equal if their _selchars are the same and - - if !ignore_length - if their _allchars_length are the same. */ - -class Hash_Table -{ -public: - /* Constructor. - size is the maximum number of entries. - ignore_length determines a detail in the comparison function. */ - Hash_Table (unsigned int size, bool ignore_length); - /* Destructor. */ - ~Hash_Table (); - /* Attempts to insert ITEM in the table. If there is already an equal - entry in it, returns it. Otherwise inserts ITEM and returns NULL. */ - KeywordExt * insert (KeywordExt *item); - /* Print the table's contents. */ - void dump () const; - -private: - /* Vector of entries. */ - KeywordExt ** _table; - /* Size of the vector. */ - unsigned int _size; - /* log2(_size). */ - unsigned int _log_size; - /* A detail of the comparison function. */ - bool const _ignore_length; - /* Statistics: Number of collisions so far. */ - unsigned int _collisions; - - /* Compares two items. */ - bool equal (KeywordExt *item1, KeywordExt *item2) const; -}; - -#endif diff --git a/contrib/gperf/src/input.cc b/contrib/gperf/src/input.cc deleted file mode 100644 index 247b5a4df745..000000000000 --- a/contrib/gperf/src/input.cc +++ /dev/null @@ -1,1005 +0,0 @@ -/* Input routines. - Copyright (C) 1989-1998, 2002-2004 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Specification. */ -#include "input.h" - -#include -#include /* declares exit() */ -#include /* declares strncpy(), strchr() */ -#include /* defines UCHAR_MAX etc. */ -#include "options.h" -#include "getline.h" - -Input::Input (FILE *stream, Keyword_Factory *keyword_factory) - : _stream (stream), _factory (keyword_factory) -{ -} - -/* Returns a pretty representation of the input file name, for error and - warning messages. */ -static const char * -pretty_input_file_name () -{ - if (option.get_input_file_name ()) - return option.get_input_file_name (); - else - return "(standard input)"; -} - -/* Returns true if the given line contains a "%DECL" declaration. */ -static bool -is_declaration (const char *line, const char *line_end, unsigned int lineno, - const char *decl) -{ - /* Skip '%'. */ - line++; - - /* Skip DECL. */ - for (const char *d = decl; *d; d++) - { - if (!(line < line_end)) - return false; - if (!(*line == *d || (*d == '-' && *line == '_'))) - return false; - line++; - } - if (line < line_end - && ((*line >= 'A' && *line <= 'Z') - || (*line >= 'a' && *line <= 'z') - || *line == '-' || *line == '_')) - return false; - - /* OK, found DECL. */ - - /* Skip whitespace. */ - while (line < line_end && (*line == ' ' || *line == '\t')) - line++; - - /* Expect end of line. */ - if (line < line_end && *line != '\n') - { - fprintf (stderr, "%s:%u: junk after declaration\n", - pretty_input_file_name (), lineno); - exit (1); - } - - return true; -} - -/* Tests if the given line contains a "%DECL=ARG" declaration. - If yes, it sets *ARGP to the argument, and returns true. - Otherwise, it returns false. */ -static bool -is_declaration_with_arg (const char *line, const char *line_end, - unsigned int lineno, - const char *decl, char **argp) -{ - /* Skip '%'. */ - line++; - - /* Skip DECL. */ - for (const char *d = decl; *d; d++) - { - if (!(line < line_end)) - return false; - if (!(*line == *d || (*d == '-' && *line == '_'))) - return false; - line++; - } - if (line < line_end - && ((*line >= 'A' && *line <= 'Z') - || (*line >= 'a' && *line <= 'z') - || *line == '-' || *line == '_')) - return false; - - /* OK, found DECL. */ - - /* Skip '='. */ - if (!(line < line_end && *line == '=')) - { - fprintf (stderr, "%s:%u: missing argument in %%%s=ARG declaration.\n", - pretty_input_file_name (), lineno, decl); - exit (1); - } - line++; - - /* The next word is the argument. */ - char *arg = new char[line_end - line + 1]; - char *p = arg; - while (line < line_end && !(*line == ' ' || *line == '\t' || *line == '\n')) - *p++ = *line++; - *p = '\0'; - - /* Skip whitespace. */ - while (line < line_end && (*line == ' ' || *line == '\t')) - line++; - - /* Expect end of line. */ - if (line < line_end && *line != '\n') - { - fprintf (stderr, "%s:%u: junk after declaration\n", - pretty_input_file_name (), lineno); - exit (1); - } - - *argp = arg; - return true; -} - -/* Tests if the given line contains a "%define DECL ARG" declaration. - If yes, it sets *ARGP to the argument, and returns true. - Otherwise, it returns false. */ -static bool -is_define_declaration (const char *line, const char *line_end, - unsigned int lineno, - const char *decl, char **argp) -{ - /* Skip '%'. */ - line++; - - /* Skip "define". */ - { - for (const char *d = "define"; *d; d++) - { - if (!(line < line_end)) - return false; - if (!(*line == *d)) - return false; - line++; - } - if (!(line < line_end && (*line == ' ' || *line == '\t'))) - return false; - } - - /* Skip whitespace. */ - while (line < line_end && (*line == ' ' || *line == '\t')) - line++; - - /* Skip DECL. */ - for (const char *d = decl; *d; d++) - { - if (!(line < line_end)) - return false; - if (!(*line == *d || (*d == '-' && *line == '_'))) - return false; - line++; - } - if (line < line_end - && ((*line >= 'A' && *line <= 'Z') - || (*line >= 'a' && *line <= 'z') - || *line == '-' || *line == '_')) - return false; - - /* OK, found DECL. */ - - /* Skip whitespace. */ - if (!(line < line_end && (*line == ' ' || *line == '\t'))) - { - fprintf (stderr, "%s:%u:" - " missing argument in %%define %s ARG declaration.\n", - pretty_input_file_name (), lineno, decl); - exit (1); - } - do - line++; - while (line < line_end && (*line == ' ' || *line == '\t')); - - /* The next word is the argument. */ - char *arg = new char[line_end - line + 1]; - char *p = arg; - while (line < line_end && !(*line == ' ' || *line == '\t' || *line == '\n')) - *p++ = *line++; - *p = '\0'; - - /* Skip whitespace. */ - while (line < line_end && (*line == ' ' || *line == '\t')) - line++; - - /* Expect end of line. */ - if (line < line_end && *line != '\n') - { - fprintf (stderr, "%s:%u: junk after declaration\n", - pretty_input_file_name (), lineno); - exit (1); - } - - *argp = arg; - return true; -} - -/* Reads the entire input file. */ -void -Input::read_input () -{ - /* The input file has the following structure: - DECLARATIONS - %% - KEYWORDS - %% - ADDITIONAL_CODE - Since the DECLARATIONS and the ADDITIONAL_CODE sections are optional, - we have to read the entire file in the case there is only one %% - separator line, in order to determine whether the structure is - DECLARATIONS - %% - KEYWORDS - or - KEYWORDS - %% - ADDITIONAL_CODE - When the option -t is given or when the first section contains - declaration lines starting with %, we go for the first interpretation, - otherwise for the second interpretation. */ - - char *input = NULL; - size_t input_size = 0; - int input_length = get_delim (&input, &input_size, EOF, _stream); - if (input_length < 0) - { - if (ferror (_stream)) - fprintf (stderr, "%s: error while reading input file\n", - pretty_input_file_name ()); - else - fprintf (stderr, "%s: The input file is empty!\n", - pretty_input_file_name ()); - exit (1); - } - - /* We use input_end as a limit, in order to cope with NUL bytes in the - input. But note that one trailing NUL byte has been added after - input_end, for convenience. */ - char *input_end = input + input_length; - - const char *declarations; - const char *declarations_end; - const char *keywords; - const char *keywords_end; - unsigned int keywords_lineno; - - /* Break up the input into the three sections. */ - { - const char *separator[2] = { NULL, NULL }; - unsigned int separator_lineno[2] = { 0, 0 }; - int separators = 0; - { - unsigned int lineno = 1; - for (const char *p = input; p < input_end; ) - { - if (p[0] == '%' && p[1] == '%') - { - separator[separators] = p; - separator_lineno[separators] = lineno; - if (++separators == 2) - break; - } - lineno++; - p = (const char *) memchr (p, '\n', input_end - p); - if (p != NULL) - p++; - else - p = input_end; - } - } - - bool has_declarations; - if (separators == 1) - { - if (option[TYPE]) - has_declarations = true; - else - { - has_declarations = false; - for (const char *p = input; p < separator[0]; ) - { - if (p[0] == '%') - { - has_declarations = true; - break; - } - p = (const char *) memchr (p, '\n', separator[0] - p); - if (p != NULL) - p++; - else - p = separator[0]; - } - } - } - else - has_declarations = (separators > 0); - - if (has_declarations) - { - declarations = input; - declarations_end = separator[0]; - /* Give a warning if the separator line is nonempty. */ - bool nonempty_line = false; - const char *p; - for (p = declarations_end + 2; p < input_end; ) - { - if (*p == '\n') - { - p++; - break; - } - if (!(*p == ' ' || *p == '\t')) - nonempty_line = true; - p++; - } - if (nonempty_line) - fprintf (stderr, "%s:%u: warning: junk after %%%% is ignored\n", - pretty_input_file_name (), separator_lineno[0]); - keywords = p; - keywords_lineno = separator_lineno[0] + 1; - } - else - { - declarations = NULL; - declarations_end = NULL; - keywords = input; - keywords_lineno = 1; - } - - if (separators > (has_declarations ? 1 : 0)) - { - keywords_end = separator[separators-1]; - _verbatim_code = separator[separators-1] + 2; - _verbatim_code_end = input_end; - _verbatim_code_lineno = separator_lineno[separators-1]; - } - else - { - keywords_end = input_end; - _verbatim_code = NULL; - _verbatim_code_end = NULL; - _verbatim_code_lineno = 0; - } - } - - /* Parse the declarations section. */ - - _verbatim_declarations = NULL; - _verbatim_declarations_end = NULL; - _verbatim_declarations_lineno = 0; - _struct_decl = NULL; - _struct_decl_lineno = 0; - _return_type = NULL; - _struct_tag = NULL; - { - unsigned int lineno = 1; - char *struct_decl = NULL; - unsigned int *struct_decl_linenos = NULL; - unsigned int struct_decl_linecount = 0; - for (const char *line = declarations; line < declarations_end; ) - { - const char *line_end; - line_end = (const char *) memchr (line, '\n', declarations_end - line); - if (line_end != NULL) - line_end++; - else - line_end = declarations_end; - - if (*line == '%') - { - if (line[1] == '{') - { - /* Handle %{. */ - if (_verbatim_declarations != NULL) - { - fprintf (stderr, "%s:%u:\n%s:%u:" - " only one %%{...%%} section is allowed\n", - pretty_input_file_name (), - _verbatim_declarations_lineno, - pretty_input_file_name (), lineno); - exit (1); - } - _verbatim_declarations = line + 2; - _verbatim_declarations_lineno = lineno; - } - else if (line[1] == '}') - { - /* Handle %}. */ - if (_verbatim_declarations == NULL) - { - fprintf (stderr, "%s:%u:" - " %%} outside of %%{...%%} section\n", - pretty_input_file_name (), lineno); - exit (1); - } - if (_verbatim_declarations_end != NULL) - { - fprintf (stderr, "%s:%u:" - " %%{...%%} section already closed\n", - pretty_input_file_name (), lineno); - exit (1); - } - _verbatim_declarations_end = line; - /* Give a warning if the rest of the line is nonempty. */ - bool nonempty_line = false; - const char *q; - for (q = line + 2; q < line_end; q++) - { - if (*q == '\n') - { - q++; - break; - } - if (!(*q == ' ' || *q == '\t')) - nonempty_line = true; - } - if (nonempty_line) - fprintf (stderr, "%s:%u:" - " warning: junk after %%} is ignored\n", - pretty_input_file_name (), lineno); - } - else if (_verbatim_declarations != NULL - && _verbatim_declarations_end == NULL) - { - fprintf (stderr, "%s:%u:" - " warning: %% directives are ignored" - " inside the %%{...%%} section\n", - pretty_input_file_name (), lineno); - } - else - { - char *arg; - - if (is_declaration_with_arg (line, line_end, lineno, - "delimiters", &arg)) - option.set_delimiters (arg); - else - - if (is_declaration (line, line_end, lineno, "struct-type")) - option.set (TYPE); - else - - if (is_declaration (line, line_end, lineno, "ignore-case")) - option.set (UPPERLOWER); - else - - if (is_declaration_with_arg (line, line_end, lineno, - "language", &arg)) - option.set_language (arg); - else - - if (is_define_declaration (line, line_end, lineno, - "slot-name", &arg)) - option.set_slot_name (arg); - else - - if (is_define_declaration (line, line_end, lineno, - "initializer-suffix", &arg)) - option.set_initializer_suffix (arg); - else - - if (is_define_declaration (line, line_end, lineno, - "hash-function-name", &arg)) - option.set_hash_name (arg); - else - - if (is_define_declaration (line, line_end, lineno, - "lookup-function-name", &arg)) - option.set_function_name (arg); - else - - if (is_define_declaration (line, line_end, lineno, - "class-name", &arg)) - option.set_class_name (arg); - else - - if (is_declaration (line, line_end, lineno, "7bit")) - option.set (SEVENBIT); - else - - if (is_declaration (line, line_end, lineno, "compare-lengths")) - option.set (LENTABLE); - else - - if (is_declaration (line, line_end, lineno, "compare-strncmp")) - option.set (COMP); - else - - if (is_declaration (line, line_end, lineno, "readonly-tables")) - option.set (CONST); - else - - if (is_declaration (line, line_end, lineno, "enum")) - option.set (ENUM); - else - - if (is_declaration (line, line_end, lineno, "includes")) - option.set (INCLUDE); - else - - if (is_declaration (line, line_end, lineno, "global-table")) - option.set (GLOBAL); - else - - if (is_declaration (line, line_end, lineno, "pic")) - option.set (SHAREDLIB); - else - - if (is_define_declaration (line, line_end, lineno, - "string-pool-name", &arg)) - option.set_stringpool_name (arg); - else - - if (is_declaration (line, line_end, lineno, "null-strings")) - option.set (NULLSTRINGS); - else - - if (is_define_declaration (line, line_end, lineno, - "word-array-name", &arg)) - option.set_wordlist_name (arg); - else - - if (is_define_declaration (line, line_end, lineno, - "length-table-name", &arg)) - option.set_lengthtable_name (arg); - else - - if (is_declaration_with_arg (line, line_end, lineno, - "switch", &arg)) - { - option.set_total_switches (atoi (arg)); - if (option.get_total_switches () <= 0) - { - fprintf (stderr, "%s:%u: number of switches %s" - " must be a positive number\n", - pretty_input_file_name (), lineno, arg); - exit (1); - } - } - else - - if (is_declaration (line, line_end, lineno, "omit-struct-type")) - option.set (NOTYPE); - else - - { - fprintf (stderr, "%s:%u: unrecognized %% directive\n", - pretty_input_file_name (), lineno); - exit (1); - } - } - } - else if (!(_verbatim_declarations != NULL - && _verbatim_declarations_end == NULL)) - { - /* Append the line to struct_decl. */ - size_t old_len = (struct_decl ? strlen (struct_decl) : 0); - size_t line_len = line_end - line; - size_t new_len = old_len + line_len + 1; - char *new_struct_decl = new char[new_len]; - if (old_len > 0) - memcpy (new_struct_decl, struct_decl, old_len); - memcpy (new_struct_decl + old_len, line, line_len); - new_struct_decl[old_len + line_len] = '\0'; - if (struct_decl) - delete[] struct_decl; - struct_decl = new_struct_decl; - /* Append the lineno to struct_decl_linenos. */ - unsigned int *new_struct_decl_linenos = - new unsigned int[struct_decl_linecount + 1]; - if (struct_decl_linecount > 0) - memcpy (new_struct_decl_linenos, struct_decl_linenos, - struct_decl_linecount * sizeof (unsigned int)); - new_struct_decl_linenos[struct_decl_linecount] = lineno; - if (struct_decl_linenos) - delete[] struct_decl_linenos; - struct_decl_linenos = new_struct_decl_linenos; - /* Increment struct_decl_linecount. */ - struct_decl_linecount++; - } - lineno++; - line = line_end; - } - if (_verbatim_declarations != NULL && _verbatim_declarations_end == NULL) - { - fprintf (stderr, "%s:%u: unterminated %%{ section\n", - pretty_input_file_name (), _verbatim_declarations_lineno); - exit (1); - } - - /* Determine _struct_decl, _return_type, _struct_tag. */ - if (option[TYPE]) - { - if (struct_decl) - { - /* Drop leading whitespace and comments. */ - { - char *p = struct_decl; - unsigned int *l = struct_decl_linenos; - for (;;) - { - if (p[0] == ' ' || p[0] == '\t') - { - p++; - continue; - } - if (p[0] == '\n') - { - l++; - p++; - continue; - } - if (p[0] == '/') - { - if (p[1] == '*') - { - /* Skip over ANSI C style comment. */ - p += 2; - while (p[0] != '\0') - { - if (p[0] == '*' && p[1] == '/') - { - p += 2; - break; - } - if (p[0] == '\n') - l++; - p++; - } - continue; - } - if (p[1] == '/') - { - /* Skip over ISO C99 or C++ style comment. */ - p += 2; - while (p[0] != '\0' && p[0] != '\n') - p++; - if (p[0] == '\n') - { - l++; - p++; - } - continue; - } - } - break; - } - if (p != struct_decl) - { - size_t len = strlen (p); - char *new_struct_decl = new char[len + 1]; - memcpy (new_struct_decl, p, len + 1); - delete[] struct_decl; - struct_decl = new_struct_decl; - } - _struct_decl_lineno = *l; - } - /* Drop trailing whitespace. */ - for (char *p = struct_decl + strlen (struct_decl); p > struct_decl;) - if (p[-1] == '\n' || p[-1] == ' ' || p[-1] == '\t') - *--p = '\0'; - else - break; - } - if (struct_decl == NULL || struct_decl[0] == '\0') - { - fprintf (stderr, "%s: missing struct declaration" - " for option --struct-type\n", - pretty_input_file_name ()); - exit (1); - } - { - /* Ensure trailing semicolon. */ - size_t old_len = strlen (struct_decl); - if (struct_decl[old_len - 1] != ';') - { - char *new_struct_decl = new char[old_len + 2]; - memcpy (new_struct_decl, struct_decl, old_len); - new_struct_decl[old_len] = ';'; - new_struct_decl[old_len + 1] = '\0'; - delete[] struct_decl; - struct_decl = new_struct_decl; - } - } - /* Set _struct_decl to the entire declaration. */ - _struct_decl = struct_decl; - /* Set _struct_tag to the naked "struct something". */ - const char *p; - for (p = struct_decl; *p && *p != '{' && *p != ';' && *p != '\n'; p++) - ; - for (; p > struct_decl;) - if (p[-1] == '\n' || p[-1] == ' ' || p[-1] == '\t') - --p; - else - break; - size_t struct_tag_length = p - struct_decl; - char *struct_tag = new char[struct_tag_length + 1]; - memcpy (struct_tag, struct_decl, struct_tag_length); - struct_tag[struct_tag_length] = '\0'; - _struct_tag = struct_tag; - /* The return type of the lookup function is "struct something *". - No "const" here, because if !option[CONST], some user code might - want to modify the structure. */ - char *return_type = new char[struct_tag_length + 3]; - memcpy (return_type, struct_decl, struct_tag_length); - return_type[struct_tag_length] = ' '; - return_type[struct_tag_length + 1] = '*'; - return_type[struct_tag_length + 2] = '\0'; - _return_type = return_type; - } - - if (struct_decl_linenos) - delete[] struct_decl_linenos; - } - - /* Parse the keywords section. */ - { - Keyword_List **list_tail = &_head; - const char *delimiters = option.get_delimiters (); - unsigned int lineno = keywords_lineno; - bool charset_dependent = false; - for (const char *line = keywords; line < keywords_end; ) - { - const char *line_end; - line_end = (const char *) memchr (line, '\n', keywords_end - line); - if (line_end != NULL) - line_end++; - else - line_end = keywords_end; - - if (line[0] == '#') - ; /* Comment line. */ - else if (line[0] == '%') - { - fprintf (stderr, "%s:%u:" - " declarations are not allowed in the keywords section.\n" - "To declare a keyword starting with %%, enclose it in" - " double-quotes.\n", - pretty_input_file_name (), lineno); - exit (1); - } - else - { - /* An input line carrying a keyword. */ - const char *keyword; - size_t keyword_length; - const char *rest; - - if (line[0] == '"') - { - /* Parse a string in ANSI C syntax. */ - char *kp = new char[line_end-line]; - keyword = kp; - const char *lp = line + 1; - - for (;;) - { - if (lp == line_end) - { - fprintf (stderr, "%s:%u: unterminated string\n", - pretty_input_file_name (), lineno); - exit (1); - } - - char c = *lp; - if (c == '\\') - { - c = *++lp; - switch (c) - { - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - { - int code = 0; - int count = 0; - while (count < 3 && *lp >= '0' && *lp <= '7') - { - code = (code << 3) + (*lp - '0'); - lp++; - count++; - } - if (code > UCHAR_MAX) - fprintf (stderr, - "%s:%u: octal escape out of range\n", - pretty_input_file_name (), lineno); - *kp = static_cast(code); - break; - } - case 'x': - { - int code = 0; - int count = 0; - lp++; - while ((*lp >= '0' && *lp <= '9') - || (*lp >= 'A' && *lp <= 'F') - || (*lp >= 'a' && *lp <= 'f')) - { - code = (code << 4) - + (*lp >= 'A' && *lp <= 'F' - ? *lp - 'A' + 10 : - *lp >= 'a' && *lp <= 'f' - ? *lp - 'a' + 10 : - *lp - '0'); - lp++; - count++; - } - if (count == 0) - fprintf (stderr, "%s:%u: hexadecimal escape" - " without any hex digits\n", - pretty_input_file_name (), lineno); - if (code > UCHAR_MAX) - fprintf (stderr, "%s:%u: hexadecimal escape" - " out of range\n", - pretty_input_file_name (), lineno); - *kp = static_cast(code); - break; - } - case '\\': case '\'': case '"': - *kp = c; - lp++; - charset_dependent = true; - break; - case 'n': - *kp = '\n'; - lp++; - charset_dependent = true; - break; - case 't': - *kp = '\t'; - lp++; - charset_dependent = true; - break; - case 'r': - *kp = '\r'; - lp++; - charset_dependent = true; - break; - case 'f': - *kp = '\f'; - lp++; - charset_dependent = true; - break; - case 'b': - *kp = '\b'; - lp++; - charset_dependent = true; - break; - case 'a': - *kp = '\a'; - lp++; - charset_dependent = true; - break; - case 'v': - *kp = '\v'; - lp++; - charset_dependent = true; - break; - default: - fprintf (stderr, "%s:%u: invalid escape sequence" - " in string\n", - pretty_input_file_name (), lineno); - exit (1); - } - } - else if (c == '"') - break; - else - { - *kp = c; - lp++; - charset_dependent = true; - } - kp++; - } - lp++; - if (lp < line_end && *lp != '\n') - { - if (strchr (delimiters, *lp) == NULL) - { - fprintf (stderr, "%s:%u: string not followed" - " by delimiter\n", - pretty_input_file_name (), lineno); - exit (1); - } - lp++; - } - keyword_length = kp - keyword; - if (option[TYPE]) - { - char *line_rest = new char[line_end - lp + 1]; - memcpy (line_rest, lp, line_end - lp); - line_rest[line_end - lp - - (line_end > lp && line_end[-1] == '\n' ? 1 : 0)] - = '\0'; - rest = line_rest; - } - else - rest = empty_string; - } - else - { - /* Not a string. Look for the delimiter. */ - const char *lp = line; - for (;;) - { - if (!(lp < line_end && *lp != '\n')) - { - keyword = line; - keyword_length = lp - line; - rest = empty_string; - break; - } - if (strchr (delimiters, *lp) != NULL) - { - keyword = line; - keyword_length = lp - line; - lp++; - if (option[TYPE]) - { - char *line_rest = new char[line_end - lp + 1]; - memcpy (line_rest, lp, line_end - lp); - line_rest[line_end - lp - - (line_end > lp && line_end[-1] == '\n' - ? 1 : 0)] - = '\0'; - rest = line_rest; - } - else - rest = empty_string; - break; - } - lp++; - } - if (keyword_length > 0) - charset_dependent = true; - } - - /* Allocate Keyword and add it to the list. */ - Keyword *new_kw = _factory->create_keyword (keyword, keyword_length, - rest); - new_kw->_lineno = lineno; - *list_tail = new Keyword_List (new_kw); - list_tail = &(*list_tail)->rest(); - } - - lineno++; - line = line_end; - } - *list_tail = NULL; - - if (_head == NULL) - { - fprintf (stderr, "%s: No keywords in input file!\n", - pretty_input_file_name ()); - exit (1); - } - - _charset_dependent = charset_dependent; - } - - /* To be freed in the destructor. */ - _input = input; - _input_end = input_end; -} - -Input::~Input () -{ - /* Free allocated memory. */ - delete[] const_cast(_return_type); - delete[] const_cast(_struct_tag); - delete[] const_cast(_struct_decl); - delete[] _input; -} diff --git a/contrib/gperf/src/input.h b/contrib/gperf/src/input.h deleted file mode 100644 index 76ba01282cc4..000000000000 --- a/contrib/gperf/src/input.h +++ /dev/null @@ -1,69 +0,0 @@ -/* This may look like C code, but it is really -*- C++ -*- */ - -/* Input routines. - - Copyright (C) 1989-1998, 2002-2003 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef input_h -#define input_h 1 - -#include -#include "keyword-list.h" - -class Input -{ -public: - Input (FILE *stream, Keyword_Factory *keyword_factory); - ~Input (); - void read_input (); -private: - /* Input stream. */ - FILE * _stream; - /* Creates the keywords. */ - Keyword_Factory * const _factory; -public: - /* Memory block containing the entire input. */ - char * _input; - char * _input_end; - /* The C code from the declarations section. */ - const char * _verbatim_declarations; - const char * _verbatim_declarations_end; - unsigned int _verbatim_declarations_lineno; - /* The C code from the end of the file. */ - const char * _verbatim_code; - const char * _verbatim_code_end; - unsigned int _verbatim_code_lineno; - /* Declaration of struct type for a keyword and its attributes. */ - const char * _struct_decl; - unsigned int _struct_decl_lineno; - /* Return type of the lookup function. */ - const char * _return_type; - /* Shorthand for user-defined struct tag type. */ - const char * _struct_tag; - /* List of all keywords. */ - Keyword_List * _head; - /* Whether the keyword chars would have different values in a different - character set. */ - bool _charset_dependent; -}; - -#endif diff --git a/contrib/gperf/src/keyword-list.cc b/contrib/gperf/src/keyword-list.cc deleted file mode 100644 index ac559f7933d2..000000000000 --- a/contrib/gperf/src/keyword-list.cc +++ /dev/null @@ -1,175 +0,0 @@ -/* Keyword list. - - Copyright (C) 2002 Free Software Foundation, Inc. - Written by Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Specification. */ -#include "keyword-list.h" - -#include - -/* -------------------------- Keyword_List class --------------------------- */ - -/* Constructor. */ -Keyword_List::Keyword_List (Keyword *car) - : _cdr (NULL), _car (car) -{ -} - -/* ------------------------- KeywordExt_List class ------------------------- */ - -/* Constructor. */ -KeywordExt_List::KeywordExt_List (KeywordExt *car) - : Keyword_List (car) -{ -} - -/* ------------------------ Keyword_List functions ------------------------- */ - -/* Copies a linear list, sharing the list elements. */ -Keyword_List * -copy_list (Keyword_List *list) -{ - Keyword_List *result; - Keyword_List **lastp = &result; - while (list != NULL) - { - Keyword_List *new_cons = new Keyword_List (list->first()); - *lastp = new_cons; - lastp = &new_cons->rest(); - list = list->rest(); - } - *lastp = NULL; - return result; -} - -/* Copies a linear list, sharing the list elements. */ -KeywordExt_List * -copy_list (KeywordExt_List *list) -{ - return static_cast (copy_list (static_cast (list))); -} - -/* Deletes a linear list, keeping the list elements in memory. */ -void -delete_list (Keyword_List *list) -{ - while (list != NULL) - { - Keyword_List *rest = list->rest(); - delete list; - list = rest; - } -} - -/* Type of a comparison function. */ -typedef bool (*Keyword_Comparison) (Keyword *keyword1, Keyword *keyword2); - -/* Merges two sorted lists together to form one sorted list. */ -static Keyword_List * -merge (Keyword_List *list1, Keyword_List *list2, Keyword_Comparison less) -{ - Keyword_List *result; - Keyword_List **resultp = &result; - for (;;) - { - if (!list1) - { - *resultp = list2; - break; - } - if (!list2) - { - *resultp = list1; - break; - } - if (less (list2->first(), list1->first())) - { - *resultp = list2; - resultp = &list2->rest(); - /* We would have a stable sorting if the next line would read: - list2 = *resultp; */ - list2 = list1; list1 = *resultp; - } - else - { - *resultp = list1; - resultp = &list1->rest(); - list1 = *resultp; - } - } - return result; -} - -/* Sorts a linear list, given a comparison function. - Note: This uses a variant of mergesort that is *not* a stable sorting - algorithm. */ -Keyword_List * -mergesort_list (Keyword_List *list, Keyword_Comparison less) -{ - if (list == NULL || list->rest() == NULL) - /* List of length 0 or 1. Nothing to do. */ - return list; - else - { - /* Determine a list node in the middle. */ - Keyword_List *middle = list; - for (Keyword_List *temp = list->rest();;) - { - temp = temp->rest(); - if (temp == NULL) - break; - temp = temp->rest(); - middle = middle->rest(); - if (temp == NULL) - break; - } - - /* Cut the list into two halves. - If the list has n elements, the left half has ceiling(n/2) elements - and the right half has floor(n/2) elements. */ - Keyword_List *right_half = middle->rest(); - middle->rest() = NULL; - - /* Sort the two halves, then merge them. */ - return merge (mergesort_list (list, less), - mergesort_list (right_half, less), - less); - } -} - -KeywordExt_List * -mergesort_list (KeywordExt_List *list, - bool (*less) (KeywordExt *keyword1, KeywordExt *keyword2)) -{ - return - static_cast - (mergesort_list (static_cast (list), - reinterpret_cast (less))); -} - - -#ifndef __OPTIMIZE__ - -#define INLINE /* not inline */ -#include "keyword-list.icc" -#undef INLINE - -#endif /* not defined __OPTIMIZE__ */ diff --git a/contrib/gperf/src/keyword-list.h b/contrib/gperf/src/keyword-list.h deleted file mode 100644 index a15b3b4adf0f..000000000000 --- a/contrib/gperf/src/keyword-list.h +++ /dev/null @@ -1,85 +0,0 @@ -/* This may look like C code, but it is really -*- C++ -*- */ - -/* Keyword list. - - Copyright (C) 2002 Free Software Foundation, Inc. - Written by Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef keyword_list_h -#define keyword_list_h 1 - -#include "keyword.h" - -/* List node of a linear list of Keyword. */ -class Keyword_List -{ -public: - /* Constructor. */ - Keyword_List (Keyword *car); - - /* Access to first element of list. */ - Keyword * first () const; - /* Access to next element of list. */ - Keyword_List *& rest (); - -protected: - Keyword_List * _cdr; - Keyword * const _car; -}; - -/* List node of a linear list of KeywordExt. */ -class KeywordExt_List : public Keyword_List -{ -public: - /* Constructor. */ - KeywordExt_List (KeywordExt *car); - - /* Access to first element of list. */ - KeywordExt * first () const; - /* Access to next element of list. */ - KeywordExt_List *& rest (); -}; - -/* Copies a linear list, sharing the list elements. */ -extern Keyword_List * copy_list (Keyword_List *list); -extern KeywordExt_List * copy_list (KeywordExt_List *list); - -/* Deletes a linear list, keeping the list elements in memory. */ -extern void delete_list (Keyword_List *list); - -/* Sorts a linear list, given a comparison function. - Note: This uses a variant of mergesort that is *not* a stable sorting - algorithm. */ -extern Keyword_List * mergesort_list (Keyword_List *list, - bool (*less) (Keyword *keyword1, - Keyword *keyword2)); -extern KeywordExt_List * mergesort_list (KeywordExt_List *list, - bool (*less) (KeywordExt *keyword1, - KeywordExt *keyword2)); - -#ifdef __OPTIMIZE__ - -#define INLINE inline -#include "keyword-list.icc" -#undef INLINE - -#endif - -#endif diff --git a/contrib/gperf/src/keyword-list.icc b/contrib/gperf/src/keyword-list.icc deleted file mode 100644 index 7fbdaacb2ccb..000000000000 --- a/contrib/gperf/src/keyword-list.icc +++ /dev/null @@ -1,53 +0,0 @@ -/* Inline Functions for keyword-list.{h,cc}. - - Copyright (C) 2002-2003 Free Software Foundation, Inc. - Written by Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* -------------------------- Keyword_List class --------------------------- */ - -/* Access to first element of list. */ -INLINE Keyword * -Keyword_List::first () const -{ - return _car; -} - -/* Access to next element of list. */ -INLINE Keyword_List *& -Keyword_List::rest () -{ - return _cdr; -} - -/* ------------------------- KeywordExt_List class ------------------------- */ - -/* Access to first element of list. */ -INLINE KeywordExt * -KeywordExt_List::first () const -{ - return static_cast(_car); -} - -/* Access to next element of list. */ -INLINE KeywordExt_List *& -KeywordExt_List::rest () -{ - return *reinterpret_cast(&_cdr); -} diff --git a/contrib/gperf/src/keyword.cc b/contrib/gperf/src/keyword.cc deleted file mode 100644 index ae53bcca320a..000000000000 --- a/contrib/gperf/src/keyword.cc +++ /dev/null @@ -1,161 +0,0 @@ -/* Keyword data. - Copyright (C) 1989-1998, 2000, 2002 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Specification. */ -#include "keyword.h" - -#include -#include -#include -#include "positions.h" - - -/* --------------------------- KeywordExt class --------------------------- */ - -/* Sort a small set of 'unsigned int', base[0..len-1], in place. */ -static inline void sort_char_set (unsigned int *base, int len) -{ - /* Bubble sort is sufficient here. */ - for (int i = 1; i < len; i++) - { - int j; - unsigned int tmp; - - for (j = i, tmp = base[j]; j > 0 && tmp < base[j - 1]; j--) - base[j] = base[j - 1]; - - base[j] = tmp; - } -} - -/* Initializes selchars and selchars_length. - - General idea: - The hash function will be computed as - asso_values[allchars[key_pos[0]]] + - asso_values[allchars[key_pos[1]]] + ... - We compute selchars as the multiset - { allchars[key_pos[0]], allchars[key_pos[1]], ... } - so that the hash function becomes - asso_values[selchars[0]] + asso_values[selchars[1]] + ... - Furthermore we sort the selchars array, to ease detection of duplicates - later. - - More in detail: The arguments alpha_unify (used for case-insensitive - hash functions) and alpha_inc (used to disambiguate permutations) - apply slight modifications. The hash function will be computed as - sum (j=0,1,...: k = key_pos[j]: - asso_values[alpha_unify[allchars[k]+alpha_inc[k]]]) - + (allchars_length if !option[NOLENGTH], 0 otherwise). - We compute selchars as the multiset - { alpha_unify[allchars[k]+alpha_inc[k]] : j=0,1,..., k = key_pos[j] } - so that the hash function becomes - asso_values[selchars[0]] + asso_values[selchars[1]] + ... - + (allchars_length if !option[NOLENGTH], 0 otherwise). - */ - -unsigned int * -KeywordExt::init_selchars_low (const Positions& positions, const unsigned int *alpha_unify, const unsigned int *alpha_inc) -{ - /* Iterate through the list of positions, initializing selchars - (via ptr). */ - PositionIterator iter = positions.iterator(_allchars_length); - - unsigned int *key_set = new unsigned int[iter.remaining()]; - unsigned int *ptr = key_set; - - for (int i; (i = iter.next ()) != PositionIterator::EOS; ) - { - unsigned int c; - if (i == Positions::LASTCHAR) - /* Special notation for last KEY position, i.e. '$'. */ - c = static_cast(_allchars[_allchars_length - 1]); - else if (i < _allchars_length) - { - /* Within range of KEY length, so we'll keep it. */ - c = static_cast(_allchars[i]); - if (alpha_inc) - c += alpha_inc[i]; - } - else - /* Out of range of KEY length, the iterator should not have - produced this. */ - abort (); - if (alpha_unify) - c = alpha_unify[c]; - *ptr = c; - ptr++; - } - - _selchars = key_set; - _selchars_length = ptr - key_set; - - return key_set; -} - -void -KeywordExt::init_selchars_tuple (const Positions& positions, const unsigned int *alpha_unify) -{ - init_selchars_low (positions, alpha_unify, NULL); -} - -void -KeywordExt::init_selchars_multiset (const Positions& positions, const unsigned int *alpha_unify, const unsigned int *alpha_inc) -{ - unsigned int *selchars = - init_selchars_low (positions, alpha_unify, alpha_inc); - - /* Sort the selchars elements alphabetically. */ - sort_char_set (selchars, _selchars_length); -} - -/* Deletes selchars. */ -void -KeywordExt::delete_selchars () -{ - delete[] const_cast(_selchars); -} - - -/* ------------------------- Keyword_Factory class ------------------------- */ - -Keyword_Factory::Keyword_Factory () -{ -} - -Keyword_Factory::~Keyword_Factory () -{ -} - - -/* ------------------------------------------------------------------------- */ - -char empty_string[1] = ""; - - -#ifndef __OPTIMIZE__ - -#define INLINE /* not inline */ -#include "keyword.icc" -#undef INLINE - -#endif /* not defined __OPTIMIZE__ */ diff --git a/contrib/gperf/src/keyword.h b/contrib/gperf/src/keyword.h deleted file mode 100644 index 88243506c2e3..000000000000 --- a/contrib/gperf/src/keyword.h +++ /dev/null @@ -1,116 +0,0 @@ -/* This may look like C code, but it is really -*- C++ -*- */ - -/* Keyword data. - - Copyright (C) 1989-1998, 2000, 2002 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef keyword_h -#define keyword_h 1 - -/* Class defined in "positions.h". */ -class Positions; - -/* An instance of this class is a keyword, as specified in the input file. */ - -struct Keyword -{ - /* Constructor. */ - Keyword (const char *allchars, int allchars_length, - const char *rest); - - /* Data members defined immediately by the input file. */ - /* The keyword as a string, possibly containing NUL bytes. */ - const char *const _allchars; - int const _allchars_length; - /* Additional stuff seen on the same line of the input file. */ - const char *const _rest; - /* Line number of this keyword in the input file. */ - unsigned int _lineno; -}; - -/* A keyword, in the context of a given keyposition list. */ - -struct KeywordExt : public Keyword -{ - /* Constructor. */ - KeywordExt (const char *allchars, int allchars_length, - const char *rest); - - /* Data members depending on the keyposition list. */ - /* The selected characters that participate for the hash function, - selected according to the keyposition list, as a canonically reordered - multiset. */ - const unsigned int * _selchars; - int _selchars_length; - /* Chained list of keywords having the same _selchars and - - if !option[NOLENGTH] - also the same _allchars_length. - Note that these duplicates are not members of the main keyword list. */ - KeywordExt * _duplicate_link; - - /* Methods depending on the keyposition list. */ - /* Initializes selchars and selchars_length, without reordering. */ - void init_selchars_tuple (const Positions& positions, const unsigned int *alpha_unify); - /* Initializes selchars and selchars_length, with reordering. */ - void init_selchars_multiset (const Positions& positions, const unsigned int *alpha_unify, const unsigned int *alpha_inc); - /* Deletes selchars. */ - void delete_selchars (); - - /* Data members used by the algorithm. */ - int _hash_value; /* Hash value for the keyword. */ - - /* Data members used by the output routines. */ - int _final_index; - -private: - unsigned int * init_selchars_low (const Positions& positions, const unsigned int *alpha_unify, const unsigned int *alpha_inc); -}; - -/* An abstract factory for creating Keyword instances. - This factory is used to make the Input class independent of the concrete - class KeywordExt. */ - -class Keyword_Factory -{ -public: - /* Constructor. */ - Keyword_Factory (); - /* Destructor. */ - virtual ~Keyword_Factory (); - - /* Creates a new Keyword. */ - virtual /*abstract*/ Keyword * - create_keyword (const char *allchars, int allchars_length, - const char *rest) = 0; -}; - -/* A statically allocated empty string. */ -extern char empty_string[1]; - -#ifdef __OPTIMIZE__ - -#define INLINE inline -#include "keyword.icc" -#undef INLINE - -#endif - -#endif diff --git a/contrib/gperf/src/keyword.icc b/contrib/gperf/src/keyword.icc deleted file mode 100644 index ba0bb56eebc1..000000000000 --- a/contrib/gperf/src/keyword.icc +++ /dev/null @@ -1,42 +0,0 @@ -/* Inline Functions for keyword.{h,cc}. - - Copyright (C) 1989-1998, 2000, 2002 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* ----------------------------- Keyword class ----------------------------- */ - -/* Constructor. */ -INLINE -Keyword::Keyword (const char *allchars, int allchars_length, const char *rest) - : _allchars (allchars), _allchars_length (allchars_length), _rest (rest) -{ -} - - -/* --------------------------- KeywordExt class --------------------------- */ - -/* Constructor. */ -INLINE -KeywordExt::KeywordExt (const char *allchars, int allchars_length, const char *rest) - : Keyword (allchars, allchars_length, rest), - _final_index (-1) -{ -} diff --git a/contrib/gperf/src/main.cc b/contrib/gperf/src/main.cc deleted file mode 100644 index 577708b48bfd..000000000000 --- a/contrib/gperf/src/main.cc +++ /dev/null @@ -1,155 +0,0 @@ -/* Driver program for the hash function generator - Copyright (C) 1989-1998, 2000, 2002-2003 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#include -#include -#include -#include "options.h" -#include "input.h" -#include "search.h" -#include "output.h" - - -/* ------------------------------------------------------------------------- */ - -/* This Keyword factory produces KeywordExt instances. */ - -class KeywordExt_Factory : public Keyword_Factory -{ -virtual Keyword * create_keyword (const char *allchars, int allchars_length, - const char *rest); -}; - -Keyword * -KeywordExt_Factory::create_keyword (const char *allchars, int allchars_length, const char *rest) -{ - return new KeywordExt (allchars, allchars_length, rest); -} - -/* ------------------------------------------------------------------------- */ - -int -main (int argc, char *argv[]) -{ - int exitcode; - - /* Set the Options. Open the input file and assign stdin to it. */ - option.parse_options (argc, argv); - - /* Open the input file. */ - if (option.get_input_file_name ()) - if (!freopen (option.get_input_file_name (), "r", stdin)) - { - fprintf (stderr, "Cannot open input file '%s'\n", - option.get_input_file_name ()); - exit (1); - } - - { - /* Initialize the keyword list. */ - KeywordExt_Factory factory; - Input inputter (stdin, &factory); - inputter.read_input (); - /* We can cast the keyword list to KeywordExt_List* because its list - elements were created by KeywordExt_Factory. */ - KeywordExt_List* list = static_cast(inputter._head); - - { - /* Search for a good hash function. */ - Search searcher (list); - searcher.optimize (); - list = searcher._head; - - /* Open the output file. */ - if (option.get_output_file_name ()) - if (strcmp (option.get_output_file_name (), "-") != 0) - if (!freopen (option.get_output_file_name (), "w", stdout)) - { - fprintf (stderr, "Cannot open output file '%s'\n", - option.get_output_file_name ()); - exit (1); - } - - { - /* Output the hash function code. */ - Output outputter (searcher._head, - inputter._struct_decl, - inputter._struct_decl_lineno, - inputter._return_type, - inputter._struct_tag, - inputter._verbatim_declarations, - inputter._verbatim_declarations_end, - inputter._verbatim_declarations_lineno, - inputter._verbatim_code, - inputter._verbatim_code_end, - inputter._verbatim_code_lineno, - inputter._charset_dependent, - searcher._total_keys, - searcher._max_key_len, - searcher._min_key_len, - searcher._key_positions, - searcher._alpha_inc, - searcher._total_duplicates, - searcher._alpha_size, - searcher._asso_values); - outputter.output (); - - /* Check for write error on stdout. */ - exitcode = 0; - if (fflush (stdout) || ferror (stdout)) - { - fprintf (stderr, "error while writing output file\n"); - exitcode = 1; - } - - /* Here we run the Output destructor. */ - } - /* Here we run the Search destructor. */ - } - - /* Also delete the list that was allocated inside Input and reordered - inside Search. */ - for (KeywordExt_List *ptr = list; ptr; ptr = ptr->rest()) - { - KeywordExt *keyword = ptr->first(); - do - { - KeywordExt *next_keyword = keyword->_duplicate_link; - delete[] const_cast(keyword->_selchars); - if (keyword->_rest != empty_string) - delete[] const_cast(keyword->_rest); - if (!(keyword->_allchars >= inputter._input - && keyword->_allchars < inputter._input_end)) - delete[] const_cast(keyword->_allchars); - delete keyword; - keyword = next_keyword; - } - while (keyword != NULL); - } - delete_list (list); - - /* Here we run the Input destructor. */ - } - - /* Don't use exit() here, it skips the destructors. */ - return exitcode; -} diff --git a/contrib/gperf/src/options.cc b/contrib/gperf/src/options.cc deleted file mode 100644 index a799b5a5c30f..000000000000 --- a/contrib/gperf/src/options.cc +++ /dev/null @@ -1,1075 +0,0 @@ -/* Handles parsing the Options provided to the user. - Copyright (C) 1989-1998, 2000, 2002-2004, 2006-2007 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Specification. */ -#include "options.h" - -#include -#include /* declares atoi(), abs(), exit() */ -#include /* declares strcmp() */ -#include /* declares isdigit() */ -#include /* defines CHAR_MAX */ -#include "getopt.h" -#include "version.h" - -/* Global option coordinator for the entire program. */ -Options option; - -/* Records the program name. */ -const char *program_name; - -/* Size to jump on a collision. */ -static const int DEFAULT_JUMP_VALUE = 5; - -/* Default name for generated lookup function. */ -static const char *const DEFAULT_FUNCTION_NAME = "in_word_set"; - -/* Default name for the key component. */ -static const char *const DEFAULT_SLOT_NAME = "name"; - -/* Default struct initializer suffix. */ -static const char *const DEFAULT_INITIALIZER_SUFFIX = ""; - -/* Default name for the generated class. */ -static const char *const DEFAULT_CLASS_NAME = "Perfect_Hash"; - -/* Default name for generated hash function. */ -static const char *const DEFAULT_HASH_NAME = "hash"; - -/* Default name for generated hash table array. */ -static const char *const DEFAULT_WORDLIST_NAME = "wordlist"; - -/* Default name for generated length table array. */ -static const char *const DEFAULT_LENGTHTABLE_NAME = "lengthtable"; - -/* Default name for string pool. */ -static const char *const DEFAULT_STRINGPOOL_NAME = "stringpool"; - -/* Default delimiters that separate keywords from their attributes. */ -static const char *const DEFAULT_DELIMITERS = ","; - -/* Prints program usage to given stream. */ - -void -Options::short_usage (FILE * stream) -{ - fprintf (stream, - "Try '%s --help' for more information.\n", program_name); -} - -void -Options::long_usage (FILE * stream) -{ - fprintf (stream, - "GNU 'gperf' generates perfect hash functions.\n"); - fprintf (stream, "\n"); - fprintf (stream, - "Usage: %s [OPTION]... [INPUT-FILE]\n", - program_name); - fprintf (stream, "\n"); - fprintf (stream, - "If a long option shows an argument as mandatory, then it is mandatory\n" - "for the equivalent short option also.\n"); - fprintf (stream, "\n"); - fprintf (stream, - "Output file location:\n"); - fprintf (stream, - " --output-file=FILE Write output to specified file.\n"); - fprintf (stream, - "The results are written to standard output if no output file is specified\n" - "or if it is -.\n"); - fprintf (stream, "\n"); - fprintf (stream, - "Input file interpretation:\n"); - fprintf (stream, - " -e, --delimiters=DELIMITER-LIST\n" - " Allow user to provide a string containing delimiters\n" - " used to separate keywords from their attributes.\n" - " Default is \",\".\n"); - fprintf (stream, - " -t, --struct-type Allows the user to include a structured type\n" - " declaration for generated code. Any text before %%%%\n" - " is considered part of the type declaration. Key\n" - " words and additional fields may follow this, one\n" - " group of fields per line.\n"); - fprintf (stream, - " --ignore-case Consider upper and lower case ASCII characters as\n" - " equivalent. Note that locale dependent case mappings\n" - " are ignored.\n"); - fprintf (stream, "\n"); - fprintf (stream, - "Language for the output code:\n"); - fprintf (stream, - " -L, --language=LANGUAGE-NAME\n" - " Generates code in the specified language. Languages\n" - " handled are currently C++, ANSI-C, C, and KR-C. The\n" - " default is C.\n"); - fprintf (stream, "\n"); - fprintf (stream, - "Details in the output code:\n"); - fprintf (stream, - " -K, --slot-name=NAME Select name of the keyword component in the keyword\n" - " structure.\n"); - fprintf (stream, - " -F, --initializer-suffix=INITIALIZERS\n" - " Initializers for additional components in the keyword\n" - " structure.\n"); - fprintf (stream, - " -H, --hash-function-name=NAME\n" - " Specify name of generated hash function. Default is\n" - " 'hash'.\n"); - fprintf (stream, - " -N, --lookup-function-name=NAME\n" - " Specify name of generated lookup function. Default\n" - " name is 'in_word_set'.\n"); - fprintf (stream, - " -Z, --class-name=NAME Specify name of generated C++ class. Default name is\n" - " 'Perfect_Hash'.\n"); - fprintf (stream, - " -7, --seven-bit Assume 7-bit characters.\n"); - fprintf (stream, - " -l, --compare-lengths Compare key lengths before trying a string\n" - " comparison. This is necessary if the keywords\n" - " contain NUL bytes. It also helps cut down on the\n" - " number of string comparisons made during the lookup.\n"); - fprintf (stream, - " -c, --compare-strncmp Generate comparison code using strncmp rather than\n" - " strcmp.\n"); - fprintf (stream, - " -C, --readonly-tables Make the contents of generated lookup tables\n" - " constant, i.e., readonly.\n"); - fprintf (stream, - " -E, --enum Define constant values using an enum local to the\n" - " lookup function rather than with defines.\n"); - fprintf (stream, - " -I, --includes Include the necessary system include file \n" - " at the beginning of the code.\n"); - fprintf (stream, - " -G, --global-table Generate the static table of keywords as a static\n" - " global variable, rather than hiding it inside of the\n" - " lookup function (which is the default behavior).\n"); - fprintf (stream, - " -P, --pic Optimize the generated table for inclusion in shared\n" - " libraries. This reduces the startup time of programs\n" - " using a shared library containing the generated code.\n"); - fprintf (stream, - " -Q, --string-pool-name=NAME\n" - " Specify name of string pool generated by option --pic.\n" - " Default name is 'stringpool'.\n"); - fprintf (stream, - " --null-strings Use NULL strings instead of empty strings for empty\n" - " keyword table entries.\n"); - fprintf (stream, - " -W, --word-array-name=NAME\n" - " Specify name of word list array. Default name is\n" - " 'wordlist'.\n"); - fprintf (stream, - " --length-table-name=NAME\n" - " Specify name of length table array. Default name is\n" - " 'lengthtable'.\n"); - fprintf (stream, - " -S, --switch=COUNT Causes the generated C code to use a switch\n" - " statement scheme, rather than an array lookup table.\n" - " This can lead to a reduction in both time and space\n" - " requirements for some keyfiles. The COUNT argument\n" - " determines how many switch statements are generated.\n" - " A value of 1 generates 1 switch containing all the\n" - " elements, a value of 2 generates 2 tables with 1/2\n" - " the elements in each table, etc. If COUNT is very\n" - " large, say 1000000, the generated C code does a\n" - " binary search.\n"); - fprintf (stream, - " -T, --omit-struct-type\n" - " Prevents the transfer of the type declaration to the\n" - " output file. Use this option if the type is already\n" - " defined elsewhere.\n"); - fprintf (stream, "\n"); - fprintf (stream, - "Algorithm employed by gperf:\n"); - fprintf (stream, - " -k, --key-positions=KEYS\n" - " Select the key positions used in the hash function.\n" - " The allowable choices range between 1-%d, inclusive.\n" - " The positions are separated by commas, ranges may be\n" - " used, and key positions may occur in any order.\n" - " Also, the meta-character '*' causes the generated\n" - " hash function to consider ALL key positions, and $\n" - " indicates the \"final character\" of a key, e.g.,\n" - " $,1,2,4,6-10.\n", - Positions::MAX_KEY_POS); - fprintf (stream, - " -D, --duplicates Handle keywords that hash to duplicate values. This\n" - " is useful for certain highly redundant keyword sets.\n"); - fprintf (stream, - " -m, --multiple-iterations=ITERATIONS\n" - " Perform multiple choices of the -i and -j values,\n" - " and choose the best results. This increases the\n" - " running time by a factor of ITERATIONS but does a\n" - " good job minimizing the generated table size.\n"); - fprintf (stream, - " -i, --initial-asso=N Provide an initial value for the associate values\n" - " array. Default is 0. Setting this value larger helps\n" - " inflate the size of the final table.\n"); - fprintf (stream, - " -j, --jump=JUMP-VALUE Affects the \"jump value\", i.e., how far to advance\n" - " the associated character value upon collisions. Must\n" - " be an odd number, default is %d.\n", - DEFAULT_JUMP_VALUE); - fprintf (stream, - " -n, --no-strlen Do not include the length of the keyword when\n" - " computing the hash function.\n"); - fprintf (stream, - " -r, --random Utilizes randomness to initialize the associated\n" - " values table.\n"); - fprintf (stream, - " -s, --size-multiple=N Affects the size of the generated hash table. The\n" - " numeric argument N indicates \"how many times larger\n" - " or smaller\" the associated value range should be,\n" - " in relationship to the number of keys, e.g. a value\n" - " of 3 means \"allow the maximum associated value to\n" - " be about 3 times larger than the number of input\n" - " keys\". Conversely, a value of 1/3 means \"make the\n" - " maximum associated value about 3 times smaller than\n" - " the number of input keys\". A larger table should\n" - " decrease the time required for an unsuccessful\n" - " search, at the expense of extra table space. Default\n" - " value is 1.\n"); - fprintf (stream, "\n"); - fprintf (stream, - "Informative output:\n" - " -h, --help Print this message.\n" - " -v, --version Print the gperf version number.\n" - " -d, --debug Enables the debugging option (produces verbose\n" - " output to the standard error).\n"); - fprintf (stream, "\n"); - fprintf (stream, - "Report bugs to .\n"); -} - -/* Prints the given options. */ - -void -Options::print_options () const -{ - printf ("/* Command-line: "); - - for (int i = 0; i < _argument_count; i++) - { - const char *arg = _argument_vector[i]; - - /* Escape arg if it contains shell metacharacters. */ - if (*arg == '-') - { - putchar (*arg); - arg++; - if ( (*arg >= 'A' && *arg <= 'Z') || (*arg >= 'a' && *arg <= 'z') ) - { - putchar (*arg); - arg++; - } - else if (*arg == '-') - { - do - { - putchar (*arg); - arg++; - } - while ( (*arg >= 'A' && *arg <= 'Z') || - (*arg >= 'a' && *arg <= 'z') || - *arg == '-'); - if (*arg == '=') - { - putchar (*arg); - arg++; - } - } - } - if (strpbrk (arg, "\t\n !\"#$&'()*;<>?[\\]`{|}~") != NULL) - { - if (strchr (arg, '\'') != NULL) - { - putchar ('"'); - for (; *arg; arg++) - { - if (*arg == '\"' || *arg == '\\' || *arg == '$' || *arg == '`') - putchar ('\\'); - putchar (*arg); - } - putchar ('"'); - } - else - { - putchar ('\''); - for (; *arg; arg++) - { - if (*arg == '\\') - putchar ('\\'); - putchar (*arg); - } - putchar ('\''); - } - } - else - printf ("%s", arg); - - printf (" "); - } - - printf (" */"); -} - -/* ------------------------------------------------------------------------- */ - -/* Parses a string denoting key positions. */ - -class PositionStringParser -{ -public: - /* Initializes a key position string parser for string STR. */ - PositionStringParser (const char *str, - int low_bound, int high_bound, - int end_word_marker, int error_value, int end_marker); - /* Returns the next key position from the given string. */ - int nextPosition (); -private: - /* A pointer to the string provided by the user. */ - const char * _str; - /* Smallest possible value, inclusive. */ - int const _low_bound; - /* Greatest possible value, inclusive. */ - int const _high_bound; - /* A value marking the abstract "end of word" ( usually '$'). */ - int const _end_word_marker; - /* Error value returned when input is syntactically erroneous. */ - int const _error_value; - /* Value returned after last key is processed. */ - int const _end_marker; - /* Intermediate state for producing a range of positions. */ - bool _in_range; /* True while producing a range of positions. */ - int _range_upper_bound; /* Upper bound (inclusive) of the range. */ - int _range_curr_value; /* Last value returned. */ -}; - -/* Initializes a key position strng parser for string STR. */ -PositionStringParser::PositionStringParser (const char *str, - int low_bound, int high_bound, - int end_word_marker, int error_value, int end_marker) - : _str (str), - _low_bound (low_bound), - _high_bound (high_bound), - _end_word_marker (end_word_marker), - _error_value (error_value), - _end_marker (end_marker), - _in_range (false) -{ -} - -/* Returns the next key position from the given string. */ -int -PositionStringParser::nextPosition () -{ - if (_in_range) - { - /* We are inside a range. Return the next value from the range. */ - if (++_range_curr_value >= _range_upper_bound) - _in_range = false; - return _range_curr_value; - } - else - { - /* Continue parsing the given string. */ - while (*_str) - switch (*_str) - { - case ',': - /* Skip the comma. */ - _str++; - break; - case '$': - /* Valid key position. */ - _str++; - return _end_word_marker; - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - /* Valid key position. */ - { - int curr_value; - for (curr_value = 0; isdigit (static_cast(*_str)); _str++) - curr_value = curr_value * 10 + (*_str - '0'); - - if (*_str == '-') - { - _str++; - /* Starting a range of key positions. */ - _in_range = true; - - for (_range_upper_bound = 0; - isdigit (static_cast(*_str)); - _str++) - _range_upper_bound = _range_upper_bound * 10 + (*_str - '0'); - - /* Verify range's upper bound. */ - if (!(_range_upper_bound > curr_value && _range_upper_bound <= _high_bound)) - return _error_value; - _range_curr_value = curr_value; - } - - /* Verify range's lower bound. */ - if (!(curr_value >= _low_bound && curr_value <= _high_bound)) - return _error_value; - return curr_value; - } - default: - /* Invalid syntax. */ - return _error_value; - } - - return _end_marker; - } -} - -/* ------------------------------------------------------------------------- */ - -/* Sets the default Options. */ - -Options::Options () - : _option_word (C), - _input_file_name (NULL), - _output_file_name (NULL), - _language (NULL), - _jump (DEFAULT_JUMP_VALUE), - _initial_asso_value (0), - _asso_iterations (0), - _total_switches (1), - _size_multiple (1), - _function_name (DEFAULT_FUNCTION_NAME), - _slot_name (DEFAULT_SLOT_NAME), - _initializer_suffix (DEFAULT_INITIALIZER_SUFFIX), - _class_name (DEFAULT_CLASS_NAME), - _hash_name (DEFAULT_HASH_NAME), - _wordlist_name (DEFAULT_WORDLIST_NAME), - _lengthtable_name (DEFAULT_LENGTHTABLE_NAME), - _stringpool_name (DEFAULT_STRINGPOOL_NAME), - _delimiters (DEFAULT_DELIMITERS), - _key_positions () -{ -} - -/* Dumps option status when debugging is enabled. */ - -Options::~Options () -{ - if (_option_word & DEBUG) - { - fprintf (stderr, "\ndumping Options:" - "\nTYPE is........: %s" - "\nUPPERLOWER is..: %s" - "\nKRC is.........: %s" - "\nC is...........: %s" - "\nANSIC is.......: %s" - "\nCPLUSPLUS is...: %s" - "\nSEVENBIT is....: %s" - "\nLENTABLE is....: %s" - "\nCOMP is........: %s" - "\nCONST is.......: %s" - "\nENUM is........: %s" - "\nINCLUDE is.....: %s" - "\nGLOBAL is......: %s" - "\nNULLSTRINGS is.: %s" - "\nSHAREDLIB is...: %s" - "\nSWITCH is......: %s" - "\nNOTYPE is......: %s" - "\nDUP is.........: %s" - "\nNOLENGTH is....: %s" - "\nRANDOM is......: %s" - "\nDEBUG is.......: %s" - "\nlookup function name = %s" - "\nhash function name = %s" - "\nword list name = %s" - "\nlength table name = %s" - "\nstring pool name = %s" - "\nslot name = %s" - "\ninitializer suffix = %s" - "\nasso_values iterations = %d" - "\njump value = %d" - "\nhash table size multiplier = %g" - "\ninitial associated value = %d" - "\ndelimiters = %s" - "\nnumber of switch statements = %d\n", - _option_word & TYPE ? "enabled" : "disabled", - _option_word & UPPERLOWER ? "enabled" : "disabled", - _option_word & KRC ? "enabled" : "disabled", - _option_word & C ? "enabled" : "disabled", - _option_word & ANSIC ? "enabled" : "disabled", - _option_word & CPLUSPLUS ? "enabled" : "disabled", - _option_word & SEVENBIT ? "enabled" : "disabled", - _option_word & LENTABLE ? "enabled" : "disabled", - _option_word & COMP ? "enabled" : "disabled", - _option_word & CONST ? "enabled" : "disabled", - _option_word & ENUM ? "enabled" : "disabled", - _option_word & INCLUDE ? "enabled" : "disabled", - _option_word & GLOBAL ? "enabled" : "disabled", - _option_word & NULLSTRINGS ? "enabled" : "disabled", - _option_word & SHAREDLIB ? "enabled" : "disabled", - _option_word & SWITCH ? "enabled" : "disabled", - _option_word & NOTYPE ? "enabled" : "disabled", - _option_word & DUP ? "enabled" : "disabled", - _option_word & NOLENGTH ? "enabled" : "disabled", - _option_word & RANDOM ? "enabled" : "disabled", - _option_word & DEBUG ? "enabled" : "disabled", - _function_name, _hash_name, _wordlist_name, _lengthtable_name, - _stringpool_name, _slot_name, _initializer_suffix, - _asso_iterations, _jump, _size_multiple, _initial_asso_value, - _delimiters, _total_switches); - if (_key_positions.is_useall()) - fprintf (stderr, "all characters are used in the hash function\n"); - else - { - fprintf (stderr, "maximum keysig size = %d\nkey positions are: \n", - _key_positions.get_size()); - - PositionIterator iter = _key_positions.iterator(); - for (int pos; (pos = iter.next()) != PositionIterator::EOS; ) - if (pos == Positions::LASTCHAR) - fprintf (stderr, "$\n"); - else - fprintf (stderr, "%d\n", pos + 1); - } - - fprintf (stderr, "finished dumping Options\n"); - } -} - - -/* Sets the output language, if not already set. */ -void -Options::set_language (const char *language) -{ - if (_language == NULL) - { - _language = language; - _option_word &= ~(KRC | C | ANSIC | CPLUSPLUS); - if (!strcmp (language, "KR-C")) - _option_word |= KRC; - else if (!strcmp (language, "C")) - _option_word |= C; - else if (!strcmp (language, "ANSI-C")) - _option_word |= ANSIC; - else if (!strcmp (language, "C++")) - _option_word |= CPLUSPLUS; - else - { - fprintf (stderr, "unsupported language option %s, defaulting to C\n", - language); - _option_word |= C; - } - } -} - -/* Sets the total number of switch statements, if not already set. */ -void -Options::set_total_switches (int total_switches) -{ - if (!(_option_word & SWITCH)) - { - _option_word |= SWITCH; - _total_switches = total_switches; - } -} - -/* Sets the generated function name, if not already set. */ -void -Options::set_function_name (const char *name) -{ - if (_function_name == DEFAULT_FUNCTION_NAME) - _function_name = name; -} - -/* Sets the keyword key name, if not already set. */ -void -Options::set_slot_name (const char *name) -{ - if (_slot_name == DEFAULT_SLOT_NAME) - _slot_name = name; -} - -/* Sets the struct initializer suffix, if not already set. */ -void -Options::set_initializer_suffix (const char *initializers) -{ - if (_initializer_suffix == DEFAULT_INITIALIZER_SUFFIX) - _initializer_suffix = initializers; -} - -/* Sets the generated class name, if not already set. */ -void -Options::set_class_name (const char *name) -{ - if (_class_name == DEFAULT_CLASS_NAME) - _class_name = name; -} - -/* Sets the hash function name, if not already set. */ -void -Options::set_hash_name (const char *name) -{ - if (_hash_name == DEFAULT_HASH_NAME) - _hash_name = name; -} - -/* Sets the hash table array name, if not already set. */ -void -Options::set_wordlist_name (const char *name) -{ - if (_wordlist_name == DEFAULT_WORDLIST_NAME) - _wordlist_name = name; -} - -/* Sets the length table array name, if not already set. */ -void -Options::set_lengthtable_name (const char *name) -{ - if (_lengthtable_name == DEFAULT_LENGTHTABLE_NAME) - _lengthtable_name = name; -} - -/* Sets the string pool name, if not already set. */ -void -Options::set_stringpool_name (const char *name) -{ - if (_stringpool_name == DEFAULT_STRINGPOOL_NAME) - _stringpool_name = name; -} - -/* Sets the delimiters string, if not already set. */ -void -Options::set_delimiters (const char *delimiters) -{ - if (_delimiters == DEFAULT_DELIMITERS) - _delimiters = delimiters; -} - - -/* Parses the command line Options and sets appropriate flags in option_word. */ - -static const struct option long_options[] = -{ - { "output-file", required_argument, NULL, CHAR_MAX + 1 }, - { "ignore-case", no_argument, NULL, CHAR_MAX + 2 }, - { "delimiters", required_argument, NULL, 'e' }, - { "struct-type", no_argument, NULL, 't' }, - { "language", required_argument, NULL, 'L' }, - { "slot-name", required_argument, NULL, 'K' }, - { "initializer-suffix", required_argument, NULL, 'F' }, - { "hash-fn-name", required_argument, NULL, 'H' }, /* backward compatibility */ - { "hash-function-name", required_argument, NULL, 'H' }, - { "lookup-fn-name", required_argument, NULL, 'N' }, /* backward compatibility */ - { "lookup-function-name", required_argument, NULL, 'N' }, - { "class-name", required_argument, NULL, 'Z' }, - { "seven-bit", no_argument, NULL, '7' }, - { "compare-strncmp", no_argument, NULL, 'c' }, - { "readonly-tables", no_argument, NULL, 'C' }, - { "enum", no_argument, NULL, 'E' }, - { "includes", no_argument, NULL, 'I' }, - { "global-table", no_argument, NULL, 'G' }, - { "word-array-name", required_argument, NULL, 'W' }, - { "length-table-name", required_argument, NULL, CHAR_MAX + 4 }, - { "switch", required_argument, NULL, 'S' }, - { "omit-struct-type", no_argument, NULL, 'T' }, - { "key-positions", required_argument, NULL, 'k' }, - { "compare-strlen", no_argument, NULL, 'l' }, /* backward compatibility */ - { "compare-lengths", no_argument, NULL, 'l' }, - { "duplicates", no_argument, NULL, 'D' }, - { "fast", required_argument, NULL, 'f' }, - { "initial-asso", required_argument, NULL, 'i' }, - { "jump", required_argument, NULL, 'j' }, - { "multiple-iterations", required_argument, NULL, 'm' }, - { "no-strlen", no_argument, NULL, 'n' }, - { "occurrence-sort", no_argument, NULL, 'o' }, - { "optimized-collision-resolution", no_argument, NULL, 'O' }, - { "pic", no_argument, NULL, 'P' }, - { "string-pool-name", required_argument, NULL, 'Q' }, - { "null-strings", no_argument, NULL, CHAR_MAX + 3 }, - { "random", no_argument, NULL, 'r' }, - { "size-multiple", required_argument, NULL, 's' }, - { "help", no_argument, NULL, 'h' }, - { "version", no_argument, NULL, 'v' }, - { "debug", no_argument, NULL, 'd' }, - { NULL, no_argument, NULL, 0 } -}; - -void -Options::parse_options (int argc, char *argv[]) -{ - int option_char; - - program_name = argv[0]; - _argument_count = argc; - _argument_vector = argv; - - while ((option_char = - getopt_long (_argument_count, _argument_vector, - "acCdDe:Ef:F:gGhH:i:Ij:k:K:lL:m:nN:oOpPQ:rs:S:tTvW:Z:7", - long_options, NULL)) - != -1) - { - switch (option_char) - { - case 'a': /* Generated code uses the ANSI prototype format. */ - break; /* This is now the default. */ - case 'c': /* Generate strncmp rather than strcmp. */ - { - _option_word |= COMP; - break; - } - case 'C': /* Make the generated tables readonly (const). */ - { - _option_word |= CONST; - break; - } - case 'd': /* Enable debugging option. */ - { - _option_word |= DEBUG; - fprintf (stderr, "Starting program %s, version %s, with debugging on.\n", - program_name, version_string); - break; - } - case 'D': /* Enable duplicate option. */ - { - _option_word |= DUP; - break; - } - case 'e': /* Specify keyword/attribute separator */ - { - _delimiters = /*getopt*/optarg; - break; - } - case 'E': - { - _option_word |= ENUM; - break; - } - case 'f': /* Generate the hash table "fast". */ - break; /* Not needed any more. */ - case 'F': - { - _initializer_suffix = /*getopt*/optarg; - break; - } - case 'g': /* Use the 'inline' keyword for generated sub-routines, ifdef __GNUC__. */ - break; /* This is now the default. */ - case 'G': /* Make the keyword table a global variable. */ - { - _option_word |= GLOBAL; - break; - } - case 'h': /* Displays a list of helpful Options to the user. */ - { - long_usage (stdout); - exit (0); - } - case 'H': /* Sets the name for the hash function. */ - { - _hash_name = /*getopt*/optarg; - break; - } - case 'i': /* Sets the initial value for the associated values array. */ - { - if ((_initial_asso_value = atoi (/*getopt*/optarg)) < 0) - fprintf (stderr, "Initial value %d should be non-zero, ignoring and continuing.\n", _initial_asso_value); - if (option[RANDOM]) - fprintf (stderr, "warning, -r option superceeds -i, ignoring -i option and continuing\n"); - break; - } - case 'I': /* Enable #include statements. */ - { - _option_word |= INCLUDE; - break; - } - case 'j': /* Sets the jump value, must be odd for later algorithms. */ - { - if ((_jump = atoi (/*getopt*/optarg)) < 0) - { - fprintf (stderr, "Jump value %d must be a positive number.\n", _jump); - short_usage (stderr); - exit (1); - } - else if (_jump && ((_jump % 2) == 0)) - fprintf (stderr, "Jump value %d should be odd, adding 1 and continuing...\n", _jump++); - break; - } - case 'k': /* Sets key positions used for hash function. */ - { - _option_word |= POSITIONS; - const int BAD_VALUE = -3; - const int EOS = PositionIterator::EOS; - int value; - PositionStringParser sparser (/*getopt*/optarg, 1, Positions::MAX_KEY_POS, Positions::LASTCHAR, BAD_VALUE, EOS); - - if (/*getopt*/optarg [0] == '*') /* Use all the characters for hashing!!!! */ - _key_positions.set_useall(true); - else - { - _key_positions.set_useall(false); - int *key_positions = _key_positions.pointer(); - int *key_pos; - - for (key_pos = key_positions; (value = sparser.nextPosition()) != EOS; key_pos++) - { - if (value == BAD_VALUE) - { - fprintf (stderr, "Invalid position value or range, use 1,2,3-%d,'$' or '*'.\n", - Positions::MAX_KEY_POS); - short_usage (stderr); - exit (1); - } - if (key_pos - key_positions == Positions::MAX_SIZE) - { - /* More than Positions::MAX_SIZE key positions. - Since all key positions are in the range - 0..Positions::MAX_KEY_POS-1 or == Positions::LASTCHAR, - there must be duplicates. */ - fprintf (stderr, "Duplicate key positions selected\n"); - short_usage (stderr); - exit (1); - } - if (value != Positions::LASTCHAR) - /* We use 0-based indices in the class Positions. */ - value = value - 1; - *key_pos = value; - } - - unsigned int total_keysig_size = key_pos - key_positions; - if (total_keysig_size == 0) - { - fprintf (stderr, "No key positions selected.\n"); - short_usage (stderr); - exit (1); - } - _key_positions.set_size (total_keysig_size); - - /* Sorts the key positions *IN REVERSE ORDER!!* - This makes further routines more efficient. Especially - when generating code. */ - if (! _key_positions.sort()) - { - fprintf (stderr, "Duplicate key positions selected\n"); - short_usage (stderr); - exit (1); - } - } - break; - } - case 'K': /* Make this the keyname for the keyword component field. */ - { - _slot_name = /*getopt*/optarg; - break; - } - case 'l': /* Create length table to avoid extra string compares. */ - { - _option_word |= LENTABLE; - break; - } - case 'L': /* Deal with different generated languages. */ - { - _language = NULL; - set_language (/*getopt*/optarg); - break; - } - case 'm': /* Multiple iterations for finding good asso_values. */ - { - if ((_asso_iterations = atoi (/*getopt*/optarg)) < 0) - { - fprintf (stderr, "asso_iterations value must not be negative, assuming 0\n"); - _asso_iterations = 0; - } - break; - } - case 'n': /* Don't include the length when computing hash function. */ - { - _option_word |= NOLENGTH; - break; - } - case 'N': /* Make generated lookup function name be optarg. */ - { - _function_name = /*getopt*/optarg; - break; - } - case 'o': /* Order input by frequency of key set occurrence. */ - break; /* Not needed any more. */ - case 'O': /* Optimized choice during collision resolution. */ - break; /* Not needed any more. */ - case 'p': /* Generated lookup function a pointer instead of int. */ - break; /* This is now the default. */ - case 'P': /* Optimize for position-independent code. */ - { - _option_word |= SHAREDLIB; - break; - } - case 'Q': /* Sets the name for the string pool. */ - { - _stringpool_name = /*getopt*/optarg; - break; - } - case 'r': /* Utilize randomness to initialize the associated values table. */ - { - _option_word |= RANDOM; - if (_initial_asso_value != 0) - fprintf (stderr, "warning, -r option supersedes -i, disabling -i option and continuing\n"); - break; - } - case 's': /* Range of associated values, determines size of final table. */ - { - float numerator; - float denominator = 1; - bool invalid = false; - char *endptr; - - numerator = strtod (/*getopt*/optarg, &endptr); - if (endptr == /*getopt*/optarg) - invalid = true; - else if (*endptr != '\0') - { - if (*endptr == '/') - { - char *denomptr = endptr + 1; - denominator = strtod (denomptr, &endptr); - if (endptr == denomptr || *endptr != '\0') - invalid = true; - } - else - invalid = true; - } - if (invalid) - { - fprintf (stderr, "Invalid value for option -s.\n"); - short_usage (stderr); - exit (1); - } - _size_multiple = numerator / denominator; - /* Backward compatibility: -3 means 1/3. */ - if (_size_multiple < 0) - _size_multiple = 1 / (-_size_multiple); - /* Catch stupid users. */ - if (_size_multiple == 0) - _size_multiple = 1; - /* Warnings. */ - if (_size_multiple > 50) - fprintf (stderr, "Size multiple %g is excessive, did you really mean this?! (try '%s --help' for help)\n", _size_multiple, program_name); - else if (_size_multiple < 0.01f) - fprintf (stderr, "Size multiple %g is extremely small, did you really mean this?! (try '%s --help' for help)\n", _size_multiple, program_name); - break; - } - case 'S': /* Generate switch statement output, rather than lookup table. */ - { - _option_word |= SWITCH; - _total_switches = atoi (/*getopt*/optarg); - if (_total_switches <= 0) - { - fprintf (stderr, "number of switches %s must be a positive number\n", /*getopt*/optarg); - short_usage (stderr); - exit (1); - } - break; - } - case 't': /* Enable the TYPE mode, allowing arbitrary user structures. */ - { - _option_word |= TYPE; - break; - } - case 'T': /* Don't print structure definition. */ - { - _option_word |= NOTYPE; - break; - } - case 'v': /* Print out the version and quit. */ - fprintf (stdout, "GNU gperf %s\n", version_string); - fprintf (stdout, "Copyright (C) %s Free Software Foundation, Inc.\n\ -This is free software; see the source for copying conditions. There is NO\n\ -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ -", - "1989-1998, 2000-2004, 2006-2007"); - fprintf (stdout, "Written by %s and %s.\n", - "Douglas C. Schmidt", "Bruno Haible"); - exit (0); - case 'W': /* Sets the name for the hash table array. */ - { - _wordlist_name = /*getopt*/optarg; - break; - } - case 'Z': /* Set the class name. */ - { - _class_name = /*getopt*/optarg; - break; - } - case '7': /* Assume 7-bit characters. */ - { - _option_word |= SEVENBIT; - break; - } - case CHAR_MAX + 1: /* Set the output file name. */ - { - _output_file_name = /*getopt*/optarg; - break; - } - case CHAR_MAX + 2: /* Case insignificant. */ - { - _option_word |= UPPERLOWER; - break; - } - case CHAR_MAX + 3: /* Use NULL instead of "". */ - { - _option_word |= NULLSTRINGS; - break; - } - case CHAR_MAX + 4: /* Sets the name for the length table array. */ - { - _lengthtable_name = /*getopt*/optarg; - break; - } - default: - short_usage (stderr); - exit (1); - } - - } - - if (/*getopt*/optind < argc) - _input_file_name = argv[/*getopt*/optind++]; - - if (/*getopt*/optind < argc) - { - fprintf (stderr, "Extra trailing arguments to %s.\n", program_name); - short_usage (stderr); - exit (1); - } -} - -/* ------------------------------------------------------------------------- */ - -#ifndef __OPTIMIZE__ - -#define INLINE /* not inline */ -#include "options.icc" -#undef INLINE - -#endif /* not defined __OPTIMIZE__ */ diff --git a/contrib/gperf/src/options.h b/contrib/gperf/src/options.h deleted file mode 100644 index bda7f0c8939c..000000000000 --- a/contrib/gperf/src/options.h +++ /dev/null @@ -1,297 +0,0 @@ -/* This may look like C code, but it is really -*- C++ -*- */ - -/* Handles parsing the Options provided to the user. - - Copyright (C) 1989-1998, 2000, 2002-2004 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This module provides a uniform interface to the various options available - to a user of the gperf hash function generator. */ - -#ifndef options_h -#define options_h 1 - -#include -#include "positions.h" - -/* Enumeration of the possible boolean options. */ - -enum Option_Type -{ - /* --- Input file interpretation --- */ - - /* Handle user-defined type structured keyword input. */ - TYPE = 1 << 0, - - /* Ignore case of ASCII characters. */ - UPPERLOWER = 1 << 1, - - /* --- Language for the output code --- */ - - /* Generate K&R C code: no prototypes, no const. */ - KRC = 1 << 2, - - /* Generate C code: no prototypes, but const (user can #define it away). */ - C = 1 << 3, - - /* Generate ISO/ANSI C code: prototypes and const, but no class. */ - ANSIC = 1 << 4, - - /* Generate C++ code: prototypes, const, class, inline, enum. */ - CPLUSPLUS = 1 << 5, - - /* --- Details in the output code --- */ - - /* Assume 7-bit, not 8-bit, characters. */ - SEVENBIT = 1 << 6, - - /* Generate a length table for string comparison. */ - LENTABLE = 1 << 7, - - /* Generate strncmp rather than strcmp. */ - COMP = 1 << 8, - - /* Make the generated tables readonly (const). */ - CONST = 1 << 9, - - /* Use enum for constants. */ - ENUM = 1 << 10, - - /* Generate #include statements. */ - INCLUDE = 1 << 11, - - /* Make the keyword table a global variable. */ - GLOBAL = 1 << 12, - - /* Use NULL strings instead of empty strings for empty table entries. */ - NULLSTRINGS = 1 << 13, - - /* Optimize for position-independent code. */ - SHAREDLIB = 1 << 14, - - /* Generate switch output to save space. */ - SWITCH = 1 << 15, - - /* Don't include user-defined type definition in output -- it's already - defined elsewhere. */ - NOTYPE = 1 << 16, - - /* --- Algorithm employed by gperf --- */ - - /* Use the given key positions. */ - POSITIONS = 1 << 17, - - /* Handle duplicate hash values for keywords. */ - DUP = 1 << 18, - - /* Don't include keyword length in hash computations. */ - NOLENGTH = 1 << 19, - - /* Randomly initialize the associated values table. */ - RANDOM = 1 << 20, - - /* --- Informative output --- */ - - /* Enable debugging (prints diagnostics to stderr). */ - DEBUG = 1 << 21 -}; - -/* Class manager for gperf program Options. */ - -class Options -{ -public: - /* Constructor. */ - Options (); - - /* Destructor. */ - ~Options (); - - /* Parses the options given in the command-line arguments. */ - void parse_options (int argc, char *argv[]); - - /* Prints the given options. */ - void print_options () const; - - /* Accessors. */ - - /* Tests a given boolean option. Returns true if set, false otherwise. */ - bool operator[] (Option_Type option) const; - /* Sets a given boolean option. */ - void set (Option_Type option); - - /* Returns the input file name. */ - const char * get_input_file_name () const; - - /* Returns the output file name. */ - const char * get_output_file_name () const; - - /* Sets the output language, if not already set. */ - void set_language (const char *language); - - /* Returns the jump value. */ - int get_jump () const; - - /* Returns the initial associated character value. */ - int get_initial_asso_value () const; - - /* Returns the number of iterations for finding good asso_values. */ - int get_asso_iterations () const; - - /* Returns the total number of switch statements to generate. */ - int get_total_switches () const; - /* Sets the total number of switch statements, if not already set. */ - void set_total_switches (int total_switches); - - /* Returns the factor by which to multiply the generated table's size. */ - float get_size_multiple () const; - - /* Returns the generated function name. */ - const char * get_function_name () const; - /* Sets the generated function name, if not already set. */ - void set_function_name (const char *name); - - /* Returns the keyword key name. */ - const char * get_slot_name () const; - /* Sets the keyword key name, if not already set. */ - void set_slot_name (const char *name); - - /* Returns the struct initializer suffix. */ - const char * get_initializer_suffix () const; - /* Sets the struct initializer suffix, if not already set. */ - void set_initializer_suffix (const char *initializers); - - /* Returns the generated class name. */ - const char * get_class_name () const; - /* Sets the generated class name, if not already set. */ - void set_class_name (const char *name); - - /* Returns the hash function name. */ - const char * get_hash_name () const; - /* Sets the hash function name, if not already set. */ - void set_hash_name (const char *name); - - /* Returns the hash table array name. */ - const char * get_wordlist_name () const; - /* Sets the hash table array name, if not already set. */ - void set_wordlist_name (const char *name); - - /* Returns the length table array name. */ - const char * get_lengthtable_name () const; - /* Sets the length table array name, if not already set. */ - void set_lengthtable_name (const char *name); - - /* Returns the string pool name. */ - const char * get_stringpool_name () const; - /* Sets the string pool name, if not already set. */ - void set_stringpool_name (const char *name); - - /* Returns the string used to delimit keywords from other attributes. */ - const char * get_delimiters () const; - /* Sets the delimiters string, if not already set. */ - void set_delimiters (const char *delimiters); - - /* Returns key positions. */ - const Positions& get_key_positions () const; - -private: - /* Prints program usage to given stream. */ - static void short_usage (FILE * stream); - - /* Prints program usage to given stream. */ - static void long_usage (FILE * stream); - - /* Records count of command-line arguments. */ - int _argument_count; - - /* Stores a pointer to command-line argument vector. */ - char ** _argument_vector; - - /* Holds the boolean options. */ - int _option_word; - - /* Name of input file. */ - char * _input_file_name; - - /* Name of output file. */ - char * _output_file_name; - - /* The output language. */ - const char * _language; - - /* Jump length when trying alternative values. */ - int _jump; - - /* Initial value for asso_values table. */ - int _initial_asso_value; - - /* Number of attempts at finding good asso_values. */ - int _asso_iterations; - - /* Number of switch statements to generate. */ - int _total_switches; - - /* Factor by which to multiply the generated table's size. */ - float _size_multiple; - - /* Names used for generated lookup function. */ - const char * _function_name; - - /* Name used for keyword key. */ - const char * _slot_name; - - /* Suffix for empty struct initializers. */ - const char * _initializer_suffix; - - /* Name used for generated C++ class. */ - const char * _class_name; - - /* Name used for generated hash function. */ - const char * _hash_name; - - /* Name used for hash table array. */ - const char * _wordlist_name; - - /* Name used for length table array. */ - const char * _lengthtable_name; - - /* Name used for the string pool. */ - const char * _stringpool_name; - - /* Separates keywords from other attributes. */ - const char * _delimiters; - - /* Contains user-specified key choices. */ - Positions _key_positions; -}; - -/* Global option coordinator for the entire program. */ -extern Options option; - -#ifdef __OPTIMIZE__ - -#define INLINE inline -#include "options.icc" -#undef INLINE - -#endif - -#endif diff --git a/contrib/gperf/src/options.icc b/contrib/gperf/src/options.icc deleted file mode 100644 index 4188ddcbfd72..000000000000 --- a/contrib/gperf/src/options.icc +++ /dev/null @@ -1,157 +0,0 @@ -/* Inline Functions for options.{h,cc}. - - Copyright (C) 1989-1998, 2000, 2002-2004 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* ----------------------------- Class Options ----------------------------- */ - -/* Tests a given boolean option. Returns true if set, false otherwise. */ -INLINE bool -Options::operator[] (Option_Type option) const -{ - return _option_word & option; -} - -/* Sets a given boolean option. */ -INLINE void -Options::set (Option_Type option) -{ - _option_word |= option; -} - -/* Returns the input file name. */ -INLINE const char * -Options::get_input_file_name () const -{ - return _input_file_name; -} - -/* Returns the output file name. */ -INLINE const char * -Options::get_output_file_name () const -{ - return _output_file_name; -} - -/* Returns the jump value. */ -INLINE int -Options::get_jump () const -{ - return _jump; -} - -/* Returns the initial associated character value. */ -INLINE int -Options::get_initial_asso_value () const -{ - return _initial_asso_value; -} - -/* Returns the number of iterations for finding finding good asso_values. */ -INLINE int -Options::get_asso_iterations () const -{ - return _asso_iterations; -} - -/* Returns the total number of switch statements to generate. */ -INLINE int -Options::get_total_switches () const -{ - return _total_switches; -} - -/* Returns the factor by which to multiply the generated table's size. */ -INLINE float -Options::get_size_multiple () const -{ - return _size_multiple; -} - -/* Returns the generated function name. */ -INLINE const char * -Options::get_function_name () const -{ - return _function_name; -} - -/* Returns the keyword key name. */ -INLINE const char * -Options::get_slot_name () const -{ - return _slot_name; -} - -/* Returns the struct initializer suffix. */ -INLINE const char * -Options::get_initializer_suffix () const -{ - return _initializer_suffix; -} - -/* Returns the generated class name. */ -INLINE const char * -Options::get_class_name () const -{ - return _class_name; -} - -/* Returns the hash function name. */ -INLINE const char * -Options::get_hash_name () const -{ - return _hash_name; -} - -/* Returns the hash table array name. */ -INLINE const char * -Options::get_wordlist_name () const -{ - return _wordlist_name; -} - -/* Returns the length table array name. */ -INLINE const char * -Options::get_lengthtable_name () const -{ - return _lengthtable_name; -} - -/* Returns the string pool name. */ -INLINE const char * -Options::get_stringpool_name () const -{ - return _stringpool_name; -} - -/* Returns the string used to delimit keywords from other attributes. */ -INLINE const char * -Options::get_delimiters () const -{ - return _delimiters; -} - -/* Returns key positions. */ -INLINE const Positions& -Options::get_key_positions () const -{ - return _key_positions; -} diff --git a/contrib/gperf/src/output.cc b/contrib/gperf/src/output.cc deleted file mode 100644 index c5569eb8da9c..000000000000 --- a/contrib/gperf/src/output.cc +++ /dev/null @@ -1,2101 +0,0 @@ -/* Output routines. - Copyright (C) 1989-1998, 2000, 2002-2004, 2006-2007 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Specification. */ -#include "output.h" - -#include -#include /* declares strncpy(), strchr() */ -#include /* declares isprint() */ -#include /* defines assert() */ -#include /* defines SCHAR_MAX etc. */ -#include "options.h" -#include "version.h" - -/* The "const " qualifier. */ -static const char *const_always; - -/* The "const " qualifier, for read-only arrays. */ -static const char *const_readonly_array; - -/* The "const " qualifier, for the array type. */ -static const char *const_for_struct; - -/* Returns the smallest unsigned C type capable of holding integers - up to N. */ - -static const char * -smallest_integral_type (int n) -{ - if (n <= UCHAR_MAX) return "unsigned char"; - if (n <= USHRT_MAX) return "unsigned short"; - return "unsigned int"; -} - -/* Returns the smallest signed C type capable of holding integers - from MIN to MAX. */ - -static const char * -smallest_integral_type (int min, int max) -{ - if (option[ANSIC] | option[CPLUSPLUS]) - if (min >= SCHAR_MIN && max <= SCHAR_MAX) return "signed char"; - if (min >= SHRT_MIN && max <= SHRT_MAX) return "short"; - return "int"; -} - -/* ------------------------------------------------------------------------- */ - -/* Constructor. - Note about the keyword list starting at head: - - The list is ordered by increasing _hash_value. This has been achieved - by Search::sort(). - - Duplicates, i.e. keywords with the same _selchars set, are chained - through the _duplicate_link pointer. Only one representative per - duplicate equivalence class remains on the linear keyword list. - - Accidental duplicates, i.e. keywords for which the _asso_values[] search - couldn't achieve different hash values, cannot occur on the linear - keyword list. Search::optimize would catch this mistake. - */ -Output::Output (KeywordExt_List *head, const char *struct_decl, - unsigned int struct_decl_lineno, const char *return_type, - const char *struct_tag, const char *verbatim_declarations, - const char *verbatim_declarations_end, - unsigned int verbatim_declarations_lineno, - const char *verbatim_code, const char *verbatim_code_end, - unsigned int verbatim_code_lineno, bool charset_dependent, - int total_keys, int max_key_len, int min_key_len, - const Positions& positions, const unsigned int *alpha_inc, - int total_duplicates, unsigned int alpha_size, - const int *asso_values) - : _head (head), _struct_decl (struct_decl), - _struct_decl_lineno (struct_decl_lineno), _return_type (return_type), - _struct_tag (struct_tag), - _verbatim_declarations (verbatim_declarations), - _verbatim_declarations_end (verbatim_declarations_end), - _verbatim_declarations_lineno (verbatim_declarations_lineno), - _verbatim_code (verbatim_code), - _verbatim_code_end (verbatim_code_end), - _verbatim_code_lineno (verbatim_code_lineno), - _charset_dependent (charset_dependent), - _total_keys (total_keys), - _max_key_len (max_key_len), _min_key_len (min_key_len), - _key_positions (positions), _alpha_inc (alpha_inc), - _total_duplicates (total_duplicates), _alpha_size (alpha_size), - _asso_values (asso_values) -{ -} - -/* ------------------------------------------------------------------------- */ - -/* Computes the minimum and maximum hash values, and stores them - in _min_hash_value and _max_hash_value. */ - -void -Output::compute_min_max () -{ - /* Since the list is already sorted by hash value all we need to do is - to look at the first and the last element of the list. */ - - _min_hash_value = _head->first()->_hash_value; - - KeywordExt_List *temp; - for (temp = _head; temp->rest(); temp = temp->rest()) - ; - _max_hash_value = temp->first()->_hash_value; -} - -/* ------------------------------------------------------------------------- */ - -/* Returns the number of different hash values. */ - -int -Output::num_hash_values () const -{ - /* Since the list is already sorted by hash value and doesn't contain - duplicates, we can simply count the number of keywords on the list. */ - int count = 0; - for (KeywordExt_List *temp = _head; temp; temp = temp->rest()) - count++; - return count; -} - -/* -------------------- Output_Constants and subclasses -------------------- */ - -/* This class outputs an enumeration defining some constants. */ - -struct Output_Constants -{ - virtual void output_start () = 0; - virtual void output_item (const char *name, int value) = 0; - virtual void output_end () = 0; - Output_Constants () {} - virtual ~Output_Constants () {} -}; - -/* This class outputs an enumeration in #define syntax. */ - -struct Output_Defines : public Output_Constants -{ - virtual void output_start (); - virtual void output_item (const char *name, int value); - virtual void output_end (); - Output_Defines () {} - virtual ~Output_Defines () {} -}; - -void Output_Defines::output_start () -{ - printf ("\n"); -} - -void Output_Defines::output_item (const char *name, int value) -{ - printf ("#define %s %d\n", name, value); -} - -void Output_Defines::output_end () -{ -} - -/* This class outputs an enumeration using 'enum'. */ - -struct Output_Enum : public Output_Constants -{ - virtual void output_start (); - virtual void output_item (const char *name, int value); - virtual void output_end (); - Output_Enum (const char *indent) - : _indentation (indent) {} - virtual ~Output_Enum () {} -private: - const char *_indentation; - bool _pending_comma; -}; - -void Output_Enum::output_start () -{ - printf ("%senum\n" - "%s {\n", - _indentation, _indentation); - _pending_comma = false; -} - -void Output_Enum::output_item (const char *name, int value) -{ - if (_pending_comma) - printf (",\n"); - printf ("%s %s = %d", _indentation, name, value); - _pending_comma = true; -} - -void Output_Enum::output_end () -{ - if (_pending_comma) - printf ("\n"); - printf ("%s };\n\n", _indentation); -} - -/* Outputs the maximum and minimum hash values etc. */ - -void -Output::output_constants (struct Output_Constants& style) const -{ - style.output_start (); - style.output_item ("TOTAL_KEYWORDS", _total_keys); - style.output_item ("MIN_WORD_LENGTH", _min_key_len); - style.output_item ("MAX_WORD_LENGTH", _max_key_len); - style.output_item ("MIN_HASH_VALUE", _min_hash_value); - style.output_item ("MAX_HASH_VALUE", _max_hash_value); - style.output_end (); -} - -/* ------------------------------------------------------------------------- */ - -/* We use a downcase table because when called repeatedly, the code - gperf_downcase[c] - is faster than - if (c >= 'A' && c <= 'Z') - c += 'a' - 'A'; - */ -#define USE_DOWNCASE_TABLE 1 - -#if USE_DOWNCASE_TABLE - -/* Output gperf's ASCII-downcase table. */ - -static void -output_upperlower_table () -{ - unsigned int c; - - printf ("#ifndef GPERF_DOWNCASE\n" - "#define GPERF_DOWNCASE 1\n" - "static unsigned char gperf_downcase[256] =\n" - " {"); - for (c = 0; c < 256; c++) - { - if ((c % 15) == 0) - printf ("\n "); - printf (" %3d", c >= 'A' && c <= 'Z' ? c + 'a' - 'A' : c); - if (c < 255) - printf (","); - } - printf ("\n" - " };\n" - "#endif\n\n"); -} - -#endif - -/* Output gperf's ASCII-case insensitive strcmp replacement. */ - -static void -output_upperlower_strcmp () -{ - printf ("#ifndef GPERF_CASE_STRCMP\n" - "#define GPERF_CASE_STRCMP 1\n" - "static int\n" - "gperf_case_strcmp "); - printf (option[KRC] ? - "(s1, s2)\n" - " register char *s1;\n" - " register char *s2;\n" : - option[C] ? - "(s1, s2)\n" - " register const char *s1;\n" - " register const char *s2;\n" : - option[ANSIC] | option[CPLUSPLUS] ? - "(register const char *s1, register const char *s2)\n" : - ""); - #if USE_DOWNCASE_TABLE - printf ("{\n" - " for (;;)\n" - " {\n" - " unsigned char c1 = gperf_downcase[(unsigned char)*s1++];\n" - " unsigned char c2 = gperf_downcase[(unsigned char)*s2++];\n" - " if (c1 != 0 && c1 == c2)\n" - " continue;\n" - " return (int)c1 - (int)c2;\n" - " }\n" - "}\n"); - #else - printf ("{\n" - " for (;;)\n" - " {\n" - " unsigned char c1 = *s1++;\n" - " unsigned char c2 = *s2++;\n" - " if (c1 >= 'A' && c1 <= 'Z')\n" - " c1 += 'a' - 'A';\n" - " if (c2 >= 'A' && c2 <= 'Z')\n" - " c2 += 'a' - 'A';\n" - " if (c1 != 0 && c1 == c2)\n" - " continue;\n" - " return (int)c1 - (int)c2;\n" - " }\n" - "}\n"); - #endif - printf ("#endif\n\n"); -} - -/* Output gperf's ASCII-case insensitive strncmp replacement. */ - -static void -output_upperlower_strncmp () -{ - printf ("#ifndef GPERF_CASE_STRNCMP\n" - "#define GPERF_CASE_STRNCMP 1\n" - "static int\n" - "gperf_case_strncmp "); - printf (option[KRC] ? - "(s1, s2, n)\n" - " register char *s1;\n" - " register char *s2;\n" - " register unsigned int n;\n" : - option[C] ? - "(s1, s2, n)\n" - " register const char *s1;\n" - " register const char *s2;\n" - " register unsigned int n;\n" : - option[ANSIC] | option[CPLUSPLUS] ? - "(register const char *s1, register const char *s2, register unsigned int n)\n" : - ""); - #if USE_DOWNCASE_TABLE - printf ("{\n" - " for (; n > 0;)\n" - " {\n" - " unsigned char c1 = gperf_downcase[(unsigned char)*s1++];\n" - " unsigned char c2 = gperf_downcase[(unsigned char)*s2++];\n" - " if (c1 != 0 && c1 == c2)\n" - " {\n" - " n--;\n" - " continue;\n" - " }\n" - " return (int)c1 - (int)c2;\n" - " }\n" - " return 0;\n" - "}\n"); - #else - printf ("{\n" - " for (; n > 0;)\n" - " {\n" - " unsigned char c1 = *s1++;\n" - " unsigned char c2 = *s2++;\n" - " if (c1 >= 'A' && c1 <= 'Z')\n" - " c1 += 'a' - 'A';\n" - " if (c2 >= 'A' && c2 <= 'Z')\n" - " c2 += 'a' - 'A';\n" - " if (c1 != 0 && c1 == c2)\n" - " {\n" - " n--;\n" - " continue;\n" - " }\n" - " return (int)c1 - (int)c2;\n" - " }\n" - " return 0;\n" - "}\n"); - #endif - printf ("#endif\n\n"); -} - -/* Output gperf's ASCII-case insensitive memcmp replacement. */ - -static void -output_upperlower_memcmp () -{ - printf ("#ifndef GPERF_CASE_MEMCMP\n" - "#define GPERF_CASE_MEMCMP 1\n" - "static int\n" - "gperf_case_memcmp "); - printf (option[KRC] ? - "(s1, s2, n)\n" - " register char *s1;\n" - " register char *s2;\n" - " register unsigned int n;\n" : - option[C] ? - "(s1, s2, n)\n" - " register const char *s1;\n" - " register const char *s2;\n" - " register unsigned int n;\n" : - option[ANSIC] | option[CPLUSPLUS] ? - "(register const char *s1, register const char *s2, register unsigned int n)\n" : - ""); - #if USE_DOWNCASE_TABLE - printf ("{\n" - " for (; n > 0;)\n" - " {\n" - " unsigned char c1 = gperf_downcase[(unsigned char)*s1++];\n" - " unsigned char c2 = gperf_downcase[(unsigned char)*s2++];\n" - " if (c1 == c2)\n" - " {\n" - " n--;\n" - " continue;\n" - " }\n" - " return (int)c1 - (int)c2;\n" - " }\n" - " return 0;\n" - "}\n"); - #else - printf ("{\n" - " for (; n > 0;)\n" - " {\n" - " unsigned char c1 = *s1++;\n" - " unsigned char c2 = *s2++;\n" - " if (c1 >= 'A' && c1 <= 'Z')\n" - " c1 += 'a' - 'A';\n" - " if (c2 >= 'A' && c2 <= 'Z')\n" - " c2 += 'a' - 'A';\n" - " if (c1 == c2)\n" - " {\n" - " n--;\n" - " continue;\n" - " }\n" - " return (int)c1 - (int)c2;\n" - " }\n" - " return 0;\n" - "}\n"); - #endif - printf ("#endif\n\n"); -} - -/* ------------------------------------------------------------------------- */ - -/* Outputs a keyword, as a string: enclosed in double quotes, escaping - backslashes, double quote and unprintable characters. */ - -static void -output_string (const char *key, int len) -{ - putchar ('"'); - for (; len > 0; len--) - { - unsigned char c = static_cast(*key++); - if (isprint (c)) - { - if (c == '"' || c == '\\') - putchar ('\\'); - putchar (c); - } - else - { - /* Use octal escapes, not hexadecimal escapes, because some old - C compilers didn't understand hexadecimal escapes, and because - hexadecimal escapes are not limited to 2 digits, thus needing - special care if the following character happens to be a digit. */ - putchar ('\\'); - putchar ('0' + ((c >> 6) & 7)); - putchar ('0' + ((c >> 3) & 7)); - putchar ('0' + (c & 7)); - } - } - putchar ('"'); -} - -/* ------------------------------------------------------------------------- */ - -/* Outputs a #line directive, referring to the given line number. */ - -static void -output_line_directive (unsigned int lineno) -{ - const char *file_name = option.get_input_file_name (); - if (file_name != NULL) - { - printf ("#line %u ", lineno); - output_string (file_name, strlen (file_name)); - printf ("\n"); - } -} - -/* ------------------------------------------------------------------------- */ - -/* Outputs a type and a const specifier (i.e. "const " or ""). - The output is terminated with a space. */ - -static void -output_const_type (const char *const_string, const char *type_string) -{ - if (type_string[strlen(type_string)-1] == '*') - /* For pointer types, put the 'const' after the type. */ - printf ("%s %s", type_string, const_string); - else - /* For scalar or struct types, put the 'const' before the type. */ - printf ("%s%s ", const_string, type_string); -} - -/* ----------------------- Output_Expr and subclasses ----------------------- */ - -/* This class outputs a general expression. */ - -struct Output_Expr -{ - virtual void output_expr () const = 0; - Output_Expr () {} - virtual ~Output_Expr () {} -}; - -/* This class outputs an expression formed by a single string. */ - -struct Output_Expr1 : public Output_Expr -{ - virtual void output_expr () const; - Output_Expr1 (const char *piece1) : _p1 (piece1) {} - virtual ~Output_Expr1 () {} -private: - const char *_p1; -}; - -void Output_Expr1::output_expr () const -{ - printf ("%s", _p1); -} - -#if 0 /* unused */ - -/* This class outputs an expression formed by the concatenation of two - strings. */ - -struct Output_Expr2 : public Output_Expr -{ - virtual void output_expr () const; - Output_Expr2 (const char *piece1, const char *piece2) - : _p1 (piece1), _p2 (piece2) {} - virtual ~Output_Expr2 () {} -private: - const char *_p1; - const char *_p2; -}; - -void Output_Expr2::output_expr () const -{ - printf ("%s%s", _p1, _p2); -} - -#endif - -/* --------------------- Output_Compare and subclasses --------------------- */ - -/* This class outputs a comparison expression. */ - -struct Output_Compare -{ - /* Outputs the comparison expression. - expr1 outputs a simple expression of type 'const char *' referring to - the string being looked up. expr2 outputs a simple expression of type - 'const char *' referring to the constant string stored in the gperf - generated hash table. */ - virtual void output_comparison (const Output_Expr& expr1, - const Output_Expr& expr2) const = 0; - /* Outputs the comparison expression for the first byte. - Returns true if the this comparison is complete. */ - bool output_firstchar_comparison (const Output_Expr& expr1, - const Output_Expr& expr2) const; - Output_Compare () {} - virtual ~Output_Compare () {} -}; - -bool Output_Compare::output_firstchar_comparison (const Output_Expr& expr1, - const Output_Expr& expr2) const -{ - /* First, we emit a comparison of the first byte of the two strings. - This catches most cases where the string being looked up is not in the - hash table but happens to have the same hash code as an element of the - hash table. */ - if (option[UPPERLOWER]) - { - /* Incomplete comparison, just for speedup. */ - printf ("(((unsigned char)*"); - expr1.output_expr (); - printf (" ^ (unsigned char)*"); - expr2.output_expr (); - printf (") & ~32) == 0"); - return false; - } - else - { - /* Complete comparison. */ - printf ("*"); - expr1.output_expr (); - printf (" == *"); - expr2.output_expr (); - return true; - } -} - -/* This class outputs a comparison using strcmp. */ - -struct Output_Compare_Strcmp : public Output_Compare -{ - virtual void output_comparison (const Output_Expr& expr1, - const Output_Expr& expr2) const; - Output_Compare_Strcmp () {} - virtual ~Output_Compare_Strcmp () {} -}; - -void Output_Compare_Strcmp::output_comparison (const Output_Expr& expr1, - const Output_Expr& expr2) const -{ - bool firstchar_done = output_firstchar_comparison (expr1, expr2); - printf (" && !"); - if (option[UPPERLOWER]) - printf ("gperf_case_"); - printf ("strcmp ("); - if (firstchar_done) - { - expr1.output_expr (); - printf (" + 1, "); - expr2.output_expr (); - printf (" + 1"); - } - else - { - expr1.output_expr (); - printf (", "); - expr2.output_expr (); - } - printf (")"); -} - -/* This class outputs a comparison using strncmp. - Note that the length of expr1 will be available through the local variable - 'len'. */ - -struct Output_Compare_Strncmp : public Output_Compare -{ - virtual void output_comparison (const Output_Expr& expr1, - const Output_Expr& expr2) const; - Output_Compare_Strncmp () {} - virtual ~Output_Compare_Strncmp () {} -}; - -void Output_Compare_Strncmp::output_comparison (const Output_Expr& expr1, - const Output_Expr& expr2) const -{ - bool firstchar_done = output_firstchar_comparison (expr1, expr2); - printf (" && !"); - if (option[UPPERLOWER]) - printf ("gperf_case_"); - printf ("strncmp ("); - if (firstchar_done) - { - expr1.output_expr (); - printf (" + 1, "); - expr2.output_expr (); - printf (" + 1, len - 1"); - } - else - { - expr1.output_expr (); - printf (", "); - expr2.output_expr (); - printf (", len"); - } - printf (") && "); - expr2.output_expr (); - printf ("[len] == '\\0'"); -} - -/* This class outputs a comparison using memcmp. - Note that the length of expr1 (available through the local variable 'len') - must be verified to be equal to the length of expr2 prior to this - comparison. */ - -struct Output_Compare_Memcmp : public Output_Compare -{ - virtual void output_comparison (const Output_Expr& expr1, - const Output_Expr& expr2) const; - Output_Compare_Memcmp () {} - virtual ~Output_Compare_Memcmp () {} -}; - -void Output_Compare_Memcmp::output_comparison (const Output_Expr& expr1, - const Output_Expr& expr2) const -{ - bool firstchar_done = output_firstchar_comparison (expr1, expr2); - printf (" && !"); - if (option[UPPERLOWER]) - printf ("gperf_case_"); - printf ("memcmp ("); - if (firstchar_done) - { - expr1.output_expr (); - printf (" + 1, "); - expr2.output_expr (); - printf (" + 1, len - 1"); - } - else - { - expr1.output_expr (); - printf (", "); - expr2.output_expr (); - printf (", len"); - } - printf (")"); -} - -/* ------------------------------------------------------------------------- */ - -/* Generates a C expression for an asso_values[] reference. */ - -void -Output::output_asso_values_ref (int pos) const -{ - printf ("asso_values["); - /* Always cast to unsigned char. This is necessary when the alpha_inc - is nonzero, and also avoids a gcc warning "subscript has type 'char'". */ - printf ("(unsigned char)"); - if (pos == Positions::LASTCHAR) - printf ("str[len - 1]"); - else - { - printf ("str[%d]", pos); - if (_alpha_inc[pos]) - printf ("+%u", _alpha_inc[pos]); - } - printf ("]"); -} - -/* Generates C code for the hash function that returns the - proper encoding for each keyword. - The hash function has the signature - unsigned int (const char *str, unsigned int len). */ - -void -Output::output_hash_function () const -{ - /* Output the function's head. */ - if (option[CPLUSPLUS]) - printf ("inline "); - else if (option[KRC] | option[C] | option[ANSIC]) - printf ("#ifdef __GNUC__\n" - "__inline\n" - "#else\n" - "#ifdef __cplusplus\n" - "inline\n" - "#endif\n" - "#endif\n"); - - if (/* The function does not use the 'str' argument? */ - _key_positions.get_size() == 0 - || /* The function uses 'str', but not the 'len' argument? */ - (option[NOLENGTH] - && _key_positions[0] < _min_key_len - && _key_positions[_key_positions.get_size() - 1] != Positions::LASTCHAR)) - /* Pacify lint. */ - printf ("/*ARGSUSED*/\n"); - - if (option[KRC] | option[C] | option[ANSIC]) - printf ("static "); - printf ("unsigned int\n"); - if (option[CPLUSPLUS]) - printf ("%s::", option.get_class_name ()); - printf ("%s ", option.get_hash_name ()); - printf (option[KRC] ? - "(str, len)\n" - " register char *str;\n" - " register unsigned int len;\n" : - option[C] ? - "(str, len)\n" - " register const char *str;\n" - " register unsigned int len;\n" : - option[ANSIC] | option[CPLUSPLUS] ? - "(register const char *str, register unsigned int len)\n" : - ""); - - /* Note that when the hash function is called, it has already been verified - that min_key_len <= len <= max_key_len. */ - - /* Output the function's body. */ - printf ("{\n"); - - /* First the asso_values array. */ - if (_key_positions.get_size() > 0) - { - printf (" static %s%s asso_values[] =\n" - " {", - const_readonly_array, - smallest_integral_type (_max_hash_value + 1)); - - const int columns = 10; - - /* Calculate maximum number of digits required for MAX_HASH_VALUE. */ - int field_width = 2; - for (int trunc = _max_hash_value; (trunc /= 10) > 0;) - field_width++; - - for (unsigned int count = 0; count < _alpha_size; count++) - { - if (count > 0) - printf (","); - if ((count % columns) == 0) - printf ("\n "); - printf ("%*d", field_width, _asso_values[count]); - } - - printf ("\n" - " };\n"); - } - - if (_key_positions.get_size() == 0) - { - /* Trivial case: No key positions at all. */ - printf (" return %s;\n", - option[NOLENGTH] ? "0" : "len"); - } - else - { - /* Iterate through the key positions. Remember that Positions::sort() - has sorted them in decreasing order, with Positions::LASTCHAR coming - last. */ - PositionIterator iter = _key_positions.iterator(_max_key_len); - int key_pos; - - /* Get the highest key position. */ - key_pos = iter.next (); - - if (key_pos == Positions::LASTCHAR || key_pos < _min_key_len) - { - /* We can perform additional optimizations here: - Write it out as a single expression. Note that the values - are added as 'int's even though the asso_values array may - contain 'unsigned char's or 'unsigned short's. */ - - printf (" return %s", - option[NOLENGTH] ? "" : "len + "); - - if (_key_positions.get_size() == 2 - && _key_positions[0] == 0 - && _key_positions[1] == Positions::LASTCHAR) - /* Optimize special case of "-k 1,$". */ - { - output_asso_values_ref (Positions::LASTCHAR); - printf (" + "); - output_asso_values_ref (0); - } - else - { - for (; key_pos != Positions::LASTCHAR; ) - { - output_asso_values_ref (key_pos); - if ((key_pos = iter.next ()) != PositionIterator::EOS) - printf (" + "); - else - break; - } - - if (key_pos == Positions::LASTCHAR) - output_asso_values_ref (Positions::LASTCHAR); - } - - printf (";\n"); - } - else - { - /* We've got to use the correct, but brute force, technique. */ - printf (" register int hval = %s;\n\n" - " switch (%s)\n" - " {\n" - " default:\n", - option[NOLENGTH] ? "0" : "len", - option[NOLENGTH] ? "len" : "hval"); - - while (key_pos != Positions::LASTCHAR && key_pos >= _max_key_len) - if ((key_pos = iter.next ()) == PositionIterator::EOS) - break; - - if (key_pos != PositionIterator::EOS && key_pos != Positions::LASTCHAR) - { - int i = key_pos; - do - { - if (i > key_pos) - printf (" /*FALLTHROUGH*/\n"); /* Pacify lint. */ - for ( ; i > key_pos; i--) - printf (" case %d:\n", i); - - printf (" hval += "); - output_asso_values_ref (key_pos); - printf (";\n"); - - key_pos = iter.next (); - } - while (key_pos != PositionIterator::EOS && key_pos != Positions::LASTCHAR); - - if (i >= _min_key_len) - printf (" /*FALLTHROUGH*/\n"); /* Pacify lint. */ - for ( ; i >= _min_key_len; i--) - printf (" case %d:\n", i); - } - - printf (" break;\n" - " }\n" - " return hval"); - if (key_pos == Positions::LASTCHAR) - { - printf (" + "); - output_asso_values_ref (Positions::LASTCHAR); - } - printf (";\n"); - } - } - printf ("}\n\n"); -} - -/* ------------------------------------------------------------------------- */ - -/* Prints out a table of keyword lengths, for use with the - comparison code in generated function 'in_word_set'. - Only called if option[LENTABLE]. */ - -void -Output::output_keylength_table () const -{ - const int columns = 14; - const char * const indent = option[GLOBAL] ? "" : " "; - - printf ("%sstatic %s%s %s[] =\n" - "%s {", - indent, const_readonly_array, - smallest_integral_type (_max_key_len), - option.get_lengthtable_name (), - indent); - - /* Generate an array of lengths, similar to output_keyword_table. */ - int index; - int column; - KeywordExt_List *temp; - - column = 0; - for (temp = _head, index = 0; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - - /* If generating a switch statement, and there is no user defined type, - we generate non-duplicates directly in the code. Only duplicates go - into the table. */ - if (option[SWITCH] && !option[TYPE] && !keyword->_duplicate_link) - continue; - - if (index < keyword->_hash_value && !option[SWITCH] && !option[DUP]) - { - /* Some blank entries. */ - for ( ; index < keyword->_hash_value; index++) - { - if (index > 0) - printf (","); - if ((column++ % columns) == 0) - printf ("\n%s ", indent); - printf ("%3d", 0); - } - } - - if (index > 0) - printf (","); - if ((column++ % columns) == 0) - printf("\n%s ", indent); - printf ("%3d", keyword->_allchars_length); - index++; - - /* Deal with duplicates specially. */ - if (keyword->_duplicate_link) // implies option[DUP] - for (KeywordExt *links = keyword->_duplicate_link; links; links = links->_duplicate_link) - { - printf (","); - if ((column++ % columns) == 0) - printf("\n%s ", indent); - printf ("%3d", links->_allchars_length); - index++; - } - } - - printf ("\n%s };\n", indent); - if (option[GLOBAL]) - printf ("\n"); -} - -/* ------------------------------------------------------------------------- */ - -/* Prints out the string pool, containing the strings of the keyword table. - Only called if option[SHAREDLIB]. */ - -void -Output::output_string_pool () const -{ - const char * const indent = option[TYPE] || option[GLOBAL] ? "" : " "; - int index; - KeywordExt_List *temp; - - printf ("%sstruct %s_t\n" - "%s {\n", - indent, option.get_stringpool_name (), indent); - for (temp = _head, index = 0; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - - /* If generating a switch statement, and there is no user defined type, - we generate non-duplicates directly in the code. Only duplicates go - into the table. */ - if (option[SWITCH] && !option[TYPE] && !keyword->_duplicate_link) - continue; - - if (!option[SWITCH] && !option[DUP]) - index = keyword->_hash_value; - - printf ("%s char %s_str%d[sizeof(", - indent, option.get_stringpool_name (), index); - output_string (keyword->_allchars, keyword->_allchars_length); - printf (")];\n"); - - /* Deal with duplicates specially. */ - if (keyword->_duplicate_link) // implies option[DUP] - for (KeywordExt *links = keyword->_duplicate_link; links; links = links->_duplicate_link) - if (!(links->_allchars_length == keyword->_allchars_length - && memcmp (links->_allchars, keyword->_allchars, - keyword->_allchars_length) == 0)) - { - index++; - printf ("%s char %s_str%d[sizeof(", - indent, option.get_stringpool_name (), index); - output_string (links->_allchars, links->_allchars_length); - printf (")];\n"); - } - - index++; - } - printf ("%s };\n", - indent); - - printf ("%sstatic %sstruct %s_t %s_contents =\n" - "%s {\n", - indent, const_readonly_array, option.get_stringpool_name (), - option.get_stringpool_name (), indent); - for (temp = _head, index = 0; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - - /* If generating a switch statement, and there is no user defined type, - we generate non-duplicates directly in the code. Only duplicates go - into the table. */ - if (option[SWITCH] && !option[TYPE] && !keyword->_duplicate_link) - continue; - - if (index > 0) - printf (",\n"); - - if (!option[SWITCH] && !option[DUP]) - index = keyword->_hash_value; - - printf ("%s ", - indent); - output_string (keyword->_allchars, keyword->_allchars_length); - - /* Deal with duplicates specially. */ - if (keyword->_duplicate_link) // implies option[DUP] - for (KeywordExt *links = keyword->_duplicate_link; links; links = links->_duplicate_link) - if (!(links->_allchars_length == keyword->_allchars_length - && memcmp (links->_allchars, keyword->_allchars, - keyword->_allchars_length) == 0)) - { - index++; - printf (",\n"); - printf ("%s ", - indent); - output_string (links->_allchars, links->_allchars_length); - } - - index++; - } - if (index > 0) - printf ("\n"); - printf ("%s };\n", - indent); - printf ("%s#define %s ((%schar *) &%s_contents)\n", - indent, option.get_stringpool_name (), const_always, - option.get_stringpool_name ()); - if (option[GLOBAL]) - printf ("\n"); -} - -/* ------------------------------------------------------------------------- */ - -static void -output_keyword_entry (KeywordExt *temp, int stringpool_index, const char *indent) -{ - if (option[TYPE]) - output_line_directive (temp->_lineno); - printf ("%s ", indent); - if (option[TYPE]) - printf ("{"); - if (option[SHAREDLIB]) - printf("offsetof(struct %s_t, %s_str%d)", option.get_stringpool_name (), option.get_stringpool_name (), stringpool_index); - else - output_string (temp->_allchars, temp->_allchars_length); - if (option[TYPE]) - { - if (strlen (temp->_rest) > 0) - printf (",%s", temp->_rest); - printf ("}"); - } - if (option[DEBUG]) - printf (" /* hash value = %d, index = %d */", - temp->_hash_value, temp->_final_index); -} - -static void -output_keyword_blank_entries (int count, const char *indent) -{ - int columns; - if (option[TYPE]) - { - columns = 58 / (4 + (option[SHAREDLIB] ? 2 : option[NULLSTRINGS] ? 8 : 2) - + strlen (option.get_initializer_suffix())); - if (columns == 0) - columns = 1; - } - else - { - columns = (option[SHAREDLIB] ? 9 : option[NULLSTRINGS] ? 4 : 9); - } - int column = 0; - for (int i = 0; i < count; i++) - { - if ((column % columns) == 0) - { - if (i > 0) - printf (",\n"); - printf ("%s ", indent); - } - else - { - if (i > 0) - printf (", "); - } - if (option[TYPE]) - printf ("{"); - if (option[SHAREDLIB]) - printf ("-1"); - else - { - if (option[NULLSTRINGS]) - printf ("(char*)0"); - else - printf ("\"\""); - } - if (option[TYPE]) - printf ("%s}", option.get_initializer_suffix()); - column++; - } -} - -/* Prints out the array containing the keywords for the hash function. */ - -void -Output::output_keyword_table () const -{ - const char *indent = option[GLOBAL] ? "" : " "; - int index; - KeywordExt_List *temp; - - printf ("%sstatic ", - indent); - output_const_type (const_readonly_array, _wordlist_eltype); - printf ("%s[] =\n" - "%s {\n", - option.get_wordlist_name (), - indent); - - /* Generate an array of reserved words at appropriate locations. */ - - for (temp = _head, index = 0; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - - /* If generating a switch statement, and there is no user defined type, - we generate non-duplicates directly in the code. Only duplicates go - into the table. */ - if (option[SWITCH] && !option[TYPE] && !keyword->_duplicate_link) - continue; - - if (index > 0) - printf (",\n"); - - if (index < keyword->_hash_value && !option[SWITCH] && !option[DUP]) - { - /* Some blank entries. */ - output_keyword_blank_entries (keyword->_hash_value - index, indent); - printf (",\n"); - index = keyword->_hash_value; - } - - keyword->_final_index = index; - - output_keyword_entry (keyword, index, indent); - - /* Deal with duplicates specially. */ - if (keyword->_duplicate_link) // implies option[DUP] - for (KeywordExt *links = keyword->_duplicate_link; links; links = links->_duplicate_link) - { - links->_final_index = ++index; - printf (",\n"); - int stringpool_index = - (links->_allchars_length == keyword->_allchars_length - && memcmp (links->_allchars, keyword->_allchars, - keyword->_allchars_length) == 0 - ? keyword->_final_index - : links->_final_index); - output_keyword_entry (links, stringpool_index, indent); - } - - index++; - } - if (index > 0) - printf ("\n"); - - printf ("%s };\n\n", indent); -} - -/* ------------------------------------------------------------------------- */ - -/* Generates the large, sparse table that maps hash values into - the smaller, contiguous range of the keyword table. */ - -void -Output::output_lookup_array () const -{ - if (option[DUP]) - { - const int DEFAULT_VALUE = -1; - - /* Because of the way output_keyword_table works, every duplicate set is - stored contiguously in the wordlist array. */ - struct duplicate_entry - { - int hash_value; /* Hash value for this particular duplicate set. */ - int index; /* Index into the main keyword storage array. */ - int count; /* Number of consecutive duplicates at this index. */ - }; - - duplicate_entry *duplicates = new duplicate_entry[_total_duplicates]; - int *lookup_array = new int[_max_hash_value + 1 + 2*_total_duplicates]; - int lookup_array_size = _max_hash_value + 1; - duplicate_entry *dup_ptr = &duplicates[0]; - int *lookup_ptr = &lookup_array[_max_hash_value + 1 + 2*_total_duplicates]; - - while (lookup_ptr > lookup_array) - *--lookup_ptr = DEFAULT_VALUE; - - /* Now dup_ptr = &duplicates[0] and lookup_ptr = &lookup_array[0]. */ - - for (KeywordExt_List *temp = _head; temp; temp = temp->rest()) - { - int hash_value = temp->first()->_hash_value; - lookup_array[hash_value] = temp->first()->_final_index; - if (option[DEBUG]) - fprintf (stderr, "keyword = %.*s, index = %d\n", - temp->first()->_allchars_length, temp->first()->_allchars, temp->first()->_final_index); - if (temp->first()->_duplicate_link) - { - /* Start a duplicate entry. */ - dup_ptr->hash_value = hash_value; - dup_ptr->index = temp->first()->_final_index; - dup_ptr->count = 1; - - for (KeywordExt *ptr = temp->first()->_duplicate_link; ptr; ptr = ptr->_duplicate_link) - { - dup_ptr->count++; - if (option[DEBUG]) - fprintf (stderr, - "static linked keyword = %.*s, index = %d\n", - ptr->_allchars_length, ptr->_allchars, ptr->_final_index); - } - assert (dup_ptr->count >= 2); - dup_ptr++; - } - } - - while (dup_ptr > duplicates) - { - dup_ptr--; - - if (option[DEBUG]) - fprintf (stderr, - "dup_ptr[%td]: hash_value = %d, index = %d, count = %d\n", - dup_ptr - duplicates, - dup_ptr->hash_value, dup_ptr->index, dup_ptr->count); - - int i; - /* Start searching for available space towards the right part - of the lookup array. */ - for (i = dup_ptr->hash_value; i < lookup_array_size-1; i++) - if (lookup_array[i] == DEFAULT_VALUE - && lookup_array[i + 1] == DEFAULT_VALUE) - goto found_i; - /* If we didn't find it to the right look to the left instead... */ - for (i = dup_ptr->hash_value-1; i >= 0; i--) - if (lookup_array[i] == DEFAULT_VALUE - && lookup_array[i + 1] == DEFAULT_VALUE) - goto found_i; - /* Append to the end of lookup_array. */ - i = lookup_array_size; - lookup_array_size += 2; - found_i: - /* Put in an indirection from dup_ptr->_hash_value to i. - At i and i+1 store dup_ptr->_final_index and dup_ptr->count. */ - assert (lookup_array[dup_ptr->hash_value] == dup_ptr->index); - lookup_array[dup_ptr->hash_value] = - 1 - _total_keys - i; - lookup_array[i] = - _total_keys + dup_ptr->index; - lookup_array[i + 1] = - dup_ptr->count; - /* All these three values are <= -2, distinct from DEFAULT_VALUE. */ - } - - /* The values of the lookup array are now known. */ - - int min = INT_MAX; - int max = INT_MIN; - lookup_ptr = lookup_array + lookup_array_size; - while (lookup_ptr > lookup_array) - { - int val = *--lookup_ptr; - if (min > val) - min = val; - if (max < val) - max = val; - } - - const char *indent = option[GLOBAL] ? "" : " "; - printf ("%sstatic %s%s lookup[] =\n" - "%s {", - indent, const_readonly_array, smallest_integral_type (min, max), - indent); - - int field_width; - /* Calculate maximum number of digits required for MIN..MAX. */ - { - field_width = 2; - for (int trunc = max; (trunc /= 10) > 0;) - field_width++; - } - if (min < 0) - { - int neg_field_width = 2; - for (int trunc = -min; (trunc /= 10) > 0;) - neg_field_width++; - neg_field_width++; /* account for the minus sign */ - if (field_width < neg_field_width) - field_width = neg_field_width; - } - - const int columns = 42 / field_width; - int column; - - column = 0; - for (int i = 0; i < lookup_array_size; i++) - { - if (i > 0) - printf (","); - if ((column++ % columns) == 0) - printf("\n%s ", indent); - printf ("%*d", field_width, lookup_array[i]); - } - printf ("\n%s };\n\n", indent); - - delete[] duplicates; - delete[] lookup_array; - } -} - -/* ------------------------------------------------------------------------- */ - -/* Generate all pools needed for the lookup function. */ - -void -Output::output_lookup_pools () const -{ - if (option[SWITCH]) - { - if (option[TYPE] || (option[DUP] && _total_duplicates > 0)) - output_string_pool (); - } - else - { - output_string_pool (); - } -} - -/* Generate all the tables needed for the lookup function. */ - -void -Output::output_lookup_tables () const -{ - if (option[SWITCH]) - { - /* Use the switch in place of lookup table. */ - if (option[LENTABLE] && (option[DUP] && _total_duplicates > 0)) - output_keylength_table (); - if (option[TYPE] || (option[DUP] && _total_duplicates > 0)) - output_keyword_table (); - } - else - { - /* Use the lookup table, in place of switch. */ - if (option[LENTABLE]) - output_keylength_table (); - output_keyword_table (); - output_lookup_array (); - } -} - -/* ------------------------------------------------------------------------- */ - -/* Output a single switch case (including duplicates). Advance list. */ - -static KeywordExt_List * -output_switch_case (KeywordExt_List *list, int indent, int *jumps_away) -{ - if (option[DEBUG]) - printf ("%*s/* hash value = %4d, keyword = \"%.*s\" */\n", - indent, "", list->first()->_hash_value, list->first()->_allchars_length, list->first()->_allchars); - - if (option[DUP] && list->first()->_duplicate_link) - { - if (option[LENTABLE]) - printf ("%*slengthptr = &%s[%d];\n", - indent, "", option.get_lengthtable_name (), list->first()->_final_index); - printf ("%*swordptr = &%s[%d];\n", - indent, "", option.get_wordlist_name (), list->first()->_final_index); - - int count = 0; - for (KeywordExt *links = list->first(); links; links = links->_duplicate_link) - count++; - - printf ("%*swordendptr = wordptr + %d;\n" - "%*sgoto multicompare;\n", - indent, "", count, - indent, ""); - *jumps_away = 1; - } - else - { - if (option[LENTABLE]) - { - printf ("%*sif (len == %d)\n" - "%*s {\n", - indent, "", list->first()->_allchars_length, - indent, ""); - indent += 4; - } - printf ("%*sresword = ", - indent, ""); - if (option[TYPE]) - printf ("&%s[%d]", option.get_wordlist_name (), list->first()->_final_index); - else - output_string (list->first()->_allchars, list->first()->_allchars_length); - printf (";\n"); - printf ("%*sgoto compare;\n", - indent, ""); - if (option[LENTABLE]) - { - indent -= 4; - printf ("%*s }\n", - indent, ""); - } - else - *jumps_away = 1; - } - - return list->rest(); -} - -/* Output a total of size cases, grouped into num_switches switch statements, - where 0 < num_switches <= size. */ - -static void -output_switches (KeywordExt_List *list, int num_switches, int size, int min_hash_value, int max_hash_value, int indent) -{ - if (option[DEBUG]) - printf ("%*s/* know %d <= key <= %d, contains %d cases */\n", - indent, "", min_hash_value, max_hash_value, size); - - if (num_switches > 1) - { - int part1 = num_switches / 2; - int part2 = num_switches - part1; - int size1 = static_cast(static_cast(size) / static_cast(num_switches) * static_cast(part1) + 0.5); - int size2 = size - size1; - - KeywordExt_List *temp = list; - for (int count = size1; count > 0; count--) - temp = temp->rest(); - - printf ("%*sif (key < %d)\n" - "%*s {\n", - indent, "", temp->first()->_hash_value, - indent, ""); - - output_switches (list, part1, size1, min_hash_value, temp->first()->_hash_value-1, indent+4); - - printf ("%*s }\n" - "%*selse\n" - "%*s {\n", - indent, "", indent, "", indent, ""); - - output_switches (temp, part2, size2, temp->first()->_hash_value, max_hash_value, indent+4); - - printf ("%*s }\n", - indent, ""); - } - else - { - /* Output a single switch. */ - int lowest_case_value = list->first()->_hash_value; - if (size == 1) - { - int jumps_away = 0; - assert (min_hash_value <= lowest_case_value); - assert (lowest_case_value <= max_hash_value); - if (min_hash_value == max_hash_value) - output_switch_case (list, indent, &jumps_away); - else - { - printf ("%*sif (key == %d)\n" - "%*s {\n", - indent, "", lowest_case_value, - indent, ""); - output_switch_case (list, indent+4, &jumps_away); - printf ("%*s }\n", - indent, ""); - } - } - else - { - if (lowest_case_value == 0) - printf ("%*sswitch (key)\n", indent, ""); - else - printf ("%*sswitch (key - %d)\n", indent, "", lowest_case_value); - printf ("%*s {\n", - indent, ""); - for (; size > 0; size--) - { - int jumps_away = 0; - printf ("%*s case %d:\n", - indent, "", list->first()->_hash_value - lowest_case_value); - list = output_switch_case (list, indent+6, &jumps_away); - if (!jumps_away) - printf ("%*s break;\n", - indent, ""); - } - printf ("%*s }\n", - indent, ""); - } - } -} - -/* Generates C code to perform the keyword lookup. */ - -void -Output::output_lookup_function_body (const Output_Compare& comparison) const -{ - printf (" if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)\n" - " {\n" - " register int key = %s (str, len);\n\n", - option.get_hash_name ()); - - if (option[SWITCH]) - { - int switch_size = num_hash_values (); - int num_switches = option.get_total_switches (); - if (num_switches > switch_size) - num_switches = switch_size; - - printf (" if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE)\n" - " {\n"); - if (option[DUP] && _total_duplicates > 0) - { - if (option[LENTABLE]) - printf (" register %s%s *lengthptr;\n", - const_always, smallest_integral_type (_max_key_len)); - printf (" register "); - output_const_type (const_readonly_array, _wordlist_eltype); - printf ("*wordptr;\n"); - printf (" register "); - output_const_type (const_readonly_array, _wordlist_eltype); - printf ("*wordendptr;\n"); - } - if (option[TYPE]) - { - printf (" register "); - output_const_type (const_readonly_array, _struct_tag); - printf ("*resword;\n\n"); - } - else - printf (" register %sresword;\n\n", - _struct_tag); - - output_switches (_head, num_switches, switch_size, _min_hash_value, _max_hash_value, 10); - - printf (" return 0;\n"); - if (option[DUP] && _total_duplicates > 0) - { - int indent = 8; - printf ("%*smulticompare:\n" - "%*s while (wordptr < wordendptr)\n" - "%*s {\n", - indent, "", indent, "", indent, ""); - if (option[LENTABLE]) - { - printf ("%*s if (len == *lengthptr)\n" - "%*s {\n", - indent, "", indent, ""); - indent += 4; - } - printf ("%*s register %schar *s = ", - indent, "", const_always); - if (option[TYPE]) - printf ("wordptr->%s", option.get_slot_name ()); - else - printf ("*wordptr"); - if (option[SHAREDLIB]) - printf (" + %s", - option.get_stringpool_name ()); - printf (";\n\n" - "%*s if (", - indent, ""); - comparison.output_comparison (Output_Expr1 ("str"), Output_Expr1 ("s")); - printf (")\n" - "%*s return %s;\n", - indent, "", - option[TYPE] ? "wordptr" : "s"); - if (option[LENTABLE]) - { - indent -= 4; - printf ("%*s }\n", - indent, ""); - } - if (option[LENTABLE]) - printf ("%*s lengthptr++;\n", - indent, ""); - printf ("%*s wordptr++;\n" - "%*s }\n" - "%*s return 0;\n", - indent, "", indent, "", indent, ""); - } - printf (" compare:\n"); - if (option[TYPE]) - { - printf (" {\n" - " register %schar *s = resword->%s", - const_always, option.get_slot_name ()); - if (option[SHAREDLIB]) - printf (" + %s", - option.get_stringpool_name ()); - printf (";\n\n" - " if ("); - comparison.output_comparison (Output_Expr1 ("str"), Output_Expr1 ("s")); - printf (")\n" - " return resword;\n" - " }\n"); - } - else - { - printf (" if ("); - comparison.output_comparison (Output_Expr1 ("str"), Output_Expr1 ("resword")); - printf (")\n" - " return resword;\n"); - } - printf (" }\n"); - } - else - { - printf (" if (key <= MAX_HASH_VALUE && key >= 0)\n"); - - if (option[DUP]) - { - int indent = 8; - printf ("%*s{\n" - "%*s register int index = lookup[key];\n\n" - "%*s if (index >= 0)\n", - indent, "", indent, "", indent, ""); - if (option[LENTABLE]) - { - printf ("%*s {\n" - "%*s if (len == %s[index])\n", - indent, "", indent, "", option.get_lengthtable_name ()); - indent += 4; - } - printf ("%*s {\n" - "%*s register %schar *s = %s[index]", - indent, "", - indent, "", const_always, option.get_wordlist_name ()); - if (option[TYPE]) - printf (".%s", option.get_slot_name ()); - if (option[SHAREDLIB]) - printf (" + %s", - option.get_stringpool_name ()); - printf (";\n\n" - "%*s if (", - indent, ""); - comparison.output_comparison (Output_Expr1 ("str"), Output_Expr1 ("s")); - printf (")\n" - "%*s return ", - indent, ""); - if (option[TYPE]) - printf ("&%s[index]", option.get_wordlist_name ()); - else - printf ("s"); - printf (";\n" - "%*s }\n", - indent, ""); - if (option[LENTABLE]) - { - indent -= 4; - printf ("%*s }\n", indent, ""); - } - if (_total_duplicates > 0) - { - printf ("%*s else if (index < -TOTAL_KEYWORDS)\n" - "%*s {\n" - "%*s register int offset = - 1 - TOTAL_KEYWORDS - index;\n", - indent, "", indent, "", indent, ""); - if (option[LENTABLE]) - printf ("%*s register %s%s *lengthptr = &%s[TOTAL_KEYWORDS + lookup[offset]];\n", - indent, "", const_always, smallest_integral_type (_max_key_len), - option.get_lengthtable_name ()); - printf ("%*s register ", - indent, ""); - output_const_type (const_readonly_array, _wordlist_eltype); - printf ("*wordptr = &%s[TOTAL_KEYWORDS + lookup[offset]];\n", - option.get_wordlist_name ()); - printf ("%*s register ", - indent, ""); - output_const_type (const_readonly_array, _wordlist_eltype); - printf ("*wordendptr = wordptr + -lookup[offset + 1];\n\n"); - printf ("%*s while (wordptr < wordendptr)\n" - "%*s {\n", - indent, "", indent, ""); - if (option[LENTABLE]) - { - printf ("%*s if (len == *lengthptr)\n" - "%*s {\n", - indent, "", indent, ""); - indent += 4; - } - printf ("%*s register %schar *s = ", - indent, "", const_always); - if (option[TYPE]) - printf ("wordptr->%s", option.get_slot_name ()); - else - printf ("*wordptr"); - if (option[SHAREDLIB]) - printf (" + %s", - option.get_stringpool_name ()); - printf (";\n\n" - "%*s if (", - indent, ""); - comparison.output_comparison (Output_Expr1 ("str"), Output_Expr1 ("s")); - printf (")\n" - "%*s return %s;\n", - indent, "", - option[TYPE] ? "wordptr" : "s"); - if (option[LENTABLE]) - { - indent -= 4; - printf ("%*s }\n", - indent, ""); - } - if (option[LENTABLE]) - printf ("%*s lengthptr++;\n", - indent, ""); - printf ("%*s wordptr++;\n" - "%*s }\n" - "%*s }\n", - indent, "", indent, "", indent, ""); - } - printf ("%*s}\n", - indent, ""); - } - else - { - int indent = 8; - if (option[LENTABLE]) - { - printf ("%*sif (len == %s[key])\n", - indent, "", option.get_lengthtable_name ()); - indent += 2; - } - - if (option[SHAREDLIB]) - { - if (!option[LENTABLE]) - { - printf ("%*s{\n" - "%*s register int o = %s[key]", - indent, "", - indent, "", option.get_wordlist_name ()); - if (option[TYPE]) - printf (".%s", option.get_slot_name ()); - printf (";\n" - "%*s if (o >= 0)\n" - "%*s {\n", - indent, "", - indent, ""); - indent += 4; - printf ("%*s register %schar *s = o", - indent, "", const_always); - } - else - { - /* No need for the (o >= 0) test, because the - (len == lengthtable[key]) test already guarantees that - key points to nonempty table entry. */ - printf ("%*s{\n" - "%*s register %schar *s = %s[key]", - indent, "", - indent, "", const_always, - option.get_wordlist_name ()); - if (option[TYPE]) - printf (".%s", option.get_slot_name ()); - } - printf (" + %s", - option.get_stringpool_name ()); - } - else - { - printf ("%*s{\n" - "%*s register %schar *s = %s[key]", - indent, "", - indent, "", const_always, option.get_wordlist_name ()); - if (option[TYPE]) - printf (".%s", option.get_slot_name ()); - } - - printf (";\n\n" - "%*s if (", - indent, ""); - if (!option[SHAREDLIB] && option[NULLSTRINGS]) - printf ("s && "); - comparison.output_comparison (Output_Expr1 ("str"), Output_Expr1 ("s")); - printf (")\n" - "%*s return ", - indent, ""); - if (option[TYPE]) - printf ("&%s[key]", option.get_wordlist_name ()); - else - printf ("s"); - printf (";\n"); - if (option[SHAREDLIB] && !option[LENTABLE]) - { - indent -= 4; - printf ("%*s }\n", - indent, ""); - } - printf ("%*s}\n", - indent, ""); - } - } - printf (" }\n" - " return 0;\n"); -} - -/* Generates C code for the lookup function. */ - -void -Output::output_lookup_function () const -{ - /* Output the function's head. */ - if (option[KRC] | option[C] | option[ANSIC]) - /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 - inline semantics, unless -fgnu89-inline is used. It defines a macro - __GNUC_STDC_INLINE__ to indicate this situation. */ - printf ("#ifdef __GNUC__\n" - "__inline\n" - "#ifdef __GNUC_STDC_INLINE__\n" - "__attribute__ ((__gnu_inline__))\n" - "#endif\n" - "#endif\n"); - - printf ("%s%s\n", - const_for_struct, _return_type); - if (option[CPLUSPLUS]) - printf ("%s::", option.get_class_name ()); - printf ("%s ", option.get_function_name ()); - printf (option[KRC] ? - "(str, len)\n" - " register char *str;\n" - " register unsigned int len;\n" : - option[C] ? - "(str, len)\n" - " register const char *str;\n" - " register unsigned int len;\n" : - option[ANSIC] | option[CPLUSPLUS] ? - "(register const char *str, register unsigned int len)\n" : - ""); - - /* Output the function's body. */ - printf ("{\n"); - - if (option[ENUM] && !option[GLOBAL]) - { - Output_Enum style (" "); - output_constants (style); - } - - if (option[SHAREDLIB] && !(option[GLOBAL] || option[TYPE])) - output_lookup_pools (); - if (!option[GLOBAL]) - output_lookup_tables (); - - if (option[LENTABLE]) - output_lookup_function_body (Output_Compare_Memcmp ()); - else - { - if (option[COMP]) - output_lookup_function_body (Output_Compare_Strncmp ()); - else - output_lookup_function_body (Output_Compare_Strcmp ()); - } - - printf ("}\n"); -} - -/* ------------------------------------------------------------------------- */ - -/* Generates the hash function and the key word recognizer function - based upon the user's Options. */ - -void -Output::output () -{ - compute_min_max (); - - if (option[C] | option[ANSIC] | option[CPLUSPLUS]) - { - const_always = "const "; - const_readonly_array = (option[CONST] ? "const " : ""); - const_for_struct = ((option[CONST] && option[TYPE]) ? "const " : ""); - } - else - { - const_always = ""; - const_readonly_array = ""; - const_for_struct = ""; - } - - if (!option[TYPE]) - { - _return_type = (const_always[0] ? "const char *" : "char *"); - _struct_tag = (const_always[0] ? "const char *" : "char *"); - } - - _wordlist_eltype = (option[SHAREDLIB] && !option[TYPE] ? "int" : _struct_tag); - - printf ("/* "); - if (option[KRC]) - printf ("KR-C"); - else if (option[C]) - printf ("C"); - else if (option[ANSIC]) - printf ("ANSI-C"); - else if (option[CPLUSPLUS]) - printf ("C++"); - printf (" code produced by gperf version %s */\n", version_string); - option.print_options (); - printf ("\n"); - if (!option[POSITIONS]) - { - printf ("/* Computed positions: -k'"); - _key_positions.print(); - printf ("' */\n"); - } - printf ("\n"); - - if (_charset_dependent - && (_key_positions.get_size() > 0 || option[UPPERLOWER])) - { - /* The generated tables assume that the execution character set is - based on ISO-646, not EBCDIC. */ - printf ("#if !((' ' == 32) && ('!' == 33) && ('\"' == 34) && ('#' == 35) \\\n" - " && ('%%' == 37) && ('&' == 38) && ('\\'' == 39) && ('(' == 40) \\\n" - " && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \\\n" - " && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \\\n" - " && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \\\n" - " && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \\\n" - " && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \\\n" - " && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \\\n" - " && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \\\n" - " && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \\\n" - " && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \\\n" - " && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \\\n" - " && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \\\n" - " && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \\\n" - " && ('Z' == 90) && ('[' == 91) && ('\\\\' == 92) && (']' == 93) \\\n" - " && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \\\n" - " && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \\\n" - " && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \\\n" - " && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \\\n" - " && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \\\n" - " && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \\\n" - " && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \\\n" - " && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))\n" - "/* The character set is not based on ISO-646. */\n"); - printf ("%s \"gperf generated tables don't work with this execution character set. Please report a bug to .\"\n", option[KRC] || option[C] ? "error" : "#error"); - printf ("#endif\n\n"); - } - - if (_verbatim_declarations < _verbatim_declarations_end) - { - output_line_directive (_verbatim_declarations_lineno); - fwrite (_verbatim_declarations, 1, - _verbatim_declarations_end - _verbatim_declarations, stdout); - } - - if (option[TYPE] && !option[NOTYPE]) /* Output type declaration now, reference it later on.... */ - { - output_line_directive (_struct_decl_lineno); - printf ("%s\n", _struct_decl); - } - - if (option[INCLUDE]) { - printf ("#include \n"); /* Declare strlen(), strcmp(), strncmp(). */ - if (option[SHAREDLIB]) - printf("#include \n"); /* Declare offsetof() */ - } - - if (!option[ENUM]) - { - Output_Defines style; - output_constants (style); - } - else if (option[GLOBAL]) - { - Output_Enum style (""); - output_constants (style); - } - - printf ("/* maximum key range = %d, duplicates = %d */\n\n", - _max_hash_value - _min_hash_value + 1, _total_duplicates); - - if (option[UPPERLOWER]) - { - #if USE_DOWNCASE_TABLE - output_upperlower_table (); - #endif - - if (option[LENTABLE]) - output_upperlower_memcmp (); - else - { - if (option[COMP]) - output_upperlower_strncmp (); - else - output_upperlower_strcmp (); - } - } - - if (option[CPLUSPLUS]) - printf ("class %s\n" - "{\n" - "private:\n" - " static inline unsigned int %s (const char *str, unsigned int len);\n" - "public:\n" - " static %s%s%s (const char *str, unsigned int len);\n" - "};\n" - "\n", - option.get_class_name (), option.get_hash_name (), - const_for_struct, _return_type, option.get_function_name ()); - - output_hash_function (); - - if (option[SHAREDLIB] && (option[GLOBAL] || option[TYPE])) - output_lookup_pools (); - if (option[GLOBAL]) - output_lookup_tables (); - - output_lookup_function (); - - if (_verbatim_code < _verbatim_code_end) - { - output_line_directive (_verbatim_code_lineno); - fwrite (_verbatim_code, 1, _verbatim_code_end - _verbatim_code, stdout); - } - - fflush (stdout); -} diff --git a/contrib/gperf/src/output.h b/contrib/gperf/src/output.h deleted file mode 100644 index bb9345bb9db0..000000000000 --- a/contrib/gperf/src/output.h +++ /dev/null @@ -1,154 +0,0 @@ -/* This may look like C code, but it is really -*- C++ -*- */ - -/* Output routines. - - Copyright (C) 1989-1998, 2000, 2002-2003 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef output_h -#define output_h 1 - -#include "keyword-list.h" -#include "positions.h" - -/* OSF/1 cxx needs these forward declarations. */ -struct Output_Constants; -struct Output_Compare; - -class Output -{ -public: - /* Constructor. */ - Output (KeywordExt_List *head, - const char *struct_decl, - unsigned int struct_decl_lineno, - const char *return_type, - const char *struct_tag, - const char *verbatim_declarations, - const char *verbatim_declarations_end, - unsigned int verbatim_declarations_lineno, - const char *verbatim_code, - const char *verbatim_code_end, - unsigned int verbatim_code_lineno, - bool charset_dependent, - int total_keys, - int max_key_len, int min_key_len, - const Positions& positions, - const unsigned int *alpha_inc, - int total_duplicates, - unsigned int alpha_size, - const int *asso_values); - - /* Generates the hash function and the key word recognizer function. */ - void output (); - -private: - - /* Computes the minimum and maximum hash values, and stores them - in _min_hash_value and _max_hash_value. */ - void compute_min_max (); - - /* Returns the number of different hash values. */ - int num_hash_values () const; - - /* Outputs the maximum and minimum hash values etc. */ - void output_constants (struct Output_Constants&) const; - - /* Generates a C expression for an asso_values[] reference. */ - void output_asso_values_ref (int pos) const; - - /* Generates C code for the hash function that returns the - proper encoding for each keyword. */ - void output_hash_function () const; - - /* Prints out a table of keyword lengths, for use with the - comparison code in generated function 'in_word_set'. */ - void output_keylength_table () const; - - /* Prints out the string pool, containing the strings of the keyword table. - */ - void output_string_pool () const; - - /* Prints out the array containing the keywords for the hash function. */ - void output_keyword_table () const; - - /* Generates the large, sparse table that maps hash values into - the smaller, contiguous range of the keyword table. */ - void output_lookup_array () const; - - /* Generate all pools needed for the lookup function. */ - void output_lookup_pools () const; - - /* Generate all the tables needed for the lookup function. */ - void output_lookup_tables () const; - - /* Generates C code to perform the keyword lookup. */ - void output_lookup_function_body (const struct Output_Compare&) const; - - /* Generates C code for the lookup function. */ - void output_lookup_function () const; - - /* Linked list of keywords. */ - KeywordExt_List * _head; - - /* Declaration of struct type for a keyword and its attributes. */ - const char * const _struct_decl; - unsigned int const _struct_decl_lineno; - /* Pointer to return type for lookup function. */ - const char * _return_type; - /* Shorthand for user-defined struct tag type. */ - const char * _struct_tag; - /* Element type of keyword array. */ - const char * _wordlist_eltype; - /* The C code from the declarations section. */ - const char * const _verbatim_declarations; - const char * const _verbatim_declarations_end; - unsigned int const _verbatim_declarations_lineno; - /* The C code from the end of the file. */ - const char * const _verbatim_code; - const char * const _verbatim_code_end; - unsigned int const _verbatim_code_lineno; - /* Whether the keyword chars would have different values in a different - character set. */ - bool _charset_dependent; - /* Total number of keys, counting duplicates. */ - int const _total_keys; - /* Maximum length of the longest keyword. */ - int const _max_key_len; - /* Minimum length of the shortest keyword. */ - int const _min_key_len; - /* Key positions. */ - Positions const _key_positions; - /* Adjustments to add to bytes add specific key positions. */ - const unsigned int * const _alpha_inc; - /* Total number of duplicate hash values. */ - int const _total_duplicates; - /* Minimum hash value for all keywords. */ - int _min_hash_value; - /* Maximum hash value for all keywords. */ - int _max_hash_value; - /* Size of alphabet. */ - unsigned int const _alpha_size; - /* Value associated with each character. */ - const int * const _asso_values; -}; - -#endif diff --git a/contrib/gperf/src/positions.cc b/contrib/gperf/src/positions.cc deleted file mode 100644 index d023fdb280f9..000000000000 --- a/contrib/gperf/src/positions.cc +++ /dev/null @@ -1,177 +0,0 @@ -/* A set of byte positions. - Copyright (C) 1989-1998, 2000, 2002 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Specification. */ -#include "positions.h" - -#include -#include /* declares exit() */ -#include - -/* ---------------------------- Class Positions ---------------------------- */ - -/* Set operations. Assumes the array is in reverse order. */ - -bool -Positions::contains (int pos) const -{ - unsigned int count = _size; - const int *p = _positions + _size - 1; - - for (; count > 0; p--, count--) - { - if (*p == pos) - return true; - if (*p > pos) - break; - } - return false; -} - -void -Positions::add (int pos) -{ - set_useall (false); - - unsigned int count = _size; - - if (count == MAX_SIZE) - { - fprintf (stderr, "Positions::add internal error: overflow\n"); - exit (1); - } - - int *p = _positions + _size - 1; - - for (; count > 0; p--, count--) - { - if (*p == pos) - { - fprintf (stderr, "Positions::add internal error: duplicate\n"); - exit (1); - } - if (*p > pos) - break; - p[1] = p[0]; - } - p[1] = pos; - _size++; -} - -void -Positions::remove (int pos) -{ - set_useall (false); - - unsigned int count = _size; - if (count > 0) - { - int *p = _positions + _size - 1; - - if (*p == pos) - { - _size--; - return; - } - if (*p < pos) - { - int prev = *p; - - for (;;) - { - p--; - count--; - if (count == 0) - break; - if (*p == pos) - { - *p = prev; - _size--; - return; - } - if (*p > pos) - break; - int curr = *p; - *p = prev; - prev = curr; - } - } - } - fprintf (stderr, "Positions::remove internal error: not found\n"); - exit (1); -} - -/* Output in external syntax. */ -void -Positions::print () const -{ - if (_useall) - printf ("*"); - else - { - bool first = true; - bool seen_LASTCHAR = false; - unsigned int count = _size; - const int *p = _positions + _size - 1; - - for (; count > 0; p--) - { - count--; - if (*p == LASTCHAR) - seen_LASTCHAR = true; - else - { - if (!first) - printf (","); - printf ("%d", *p + 1); - if (count > 0 && p[-1] == *p + 1) - { - printf ("-"); - do - { - p--; - count--; - } - while (count > 0 && p[-1] == *p + 1); - printf ("%d", *p + 1); - } - first = false; - } - } - if (seen_LASTCHAR) - { - if (!first) - printf (","); - printf ("$"); - } - } -} - -/* ------------------------------------------------------------------------- */ - -#ifndef __OPTIMIZE__ - -#define INLINE /* not inline */ -#include "positions.icc" -#undef INLINE - -#endif /* not defined __OPTIMIZE__ */ diff --git a/contrib/gperf/src/positions.h b/contrib/gperf/src/positions.h deleted file mode 100644 index 596844f7b858..000000000000 --- a/contrib/gperf/src/positions.h +++ /dev/null @@ -1,175 +0,0 @@ -/* This may look like C code, but it is really -*- C++ -*- */ - -/* A set of byte positions. - - Copyright (C) 1989-1998, 2000, 2002, 2005 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef positions_h -#define positions_h 1 - -/* Classes defined below. */ -class PositionIterator; -class PositionReverseIterator; - -/* This class denotes a set of byte positions, used to access a keyword. */ - -class Positions -{ - friend class PositionIterator; - friend class PositionReverseIterator; -public: - /* Denotes the last char of a keyword, depending on the keyword's length. */ - enum { LASTCHAR = -1 }; - - /* Maximum key position specifiable by the user, 1-based. - Note that MAX_KEY_POS-1 must fit into the element type of _positions[], - below. */ - enum { MAX_KEY_POS = 255 }; - - /* Maximum possible size. Since duplicates are eliminated and the possible - 0-based positions are -1 .. MAX_KEY_POS-1, this is: */ - enum { MAX_SIZE = MAX_KEY_POS + 1 }; - - /* Constructors. */ - Positions (); - Positions (int pos1); - Positions (int pos1, int pos2); - - /* Copy constructor. */ - Positions (const Positions& src); - - /* Assignment operator. */ - Positions& operator= (const Positions& src); - - /* Accessors. */ - bool is_useall () const; - int operator[] (unsigned int index) const; - unsigned int get_size () const; - - /* Write access. */ - void set_useall (bool useall); - int * pointer (); - void set_size (unsigned int size); - - /* Sorts the array in reverse order. - Returns true if there are no duplicates, false otherwise. */ - bool sort (); - - /* Creates an iterator, returning the positions in descending order. */ - PositionIterator iterator () const; - /* Creates an iterator, returning the positions in descending order, - that apply to strings of length <= maxlen. */ - PositionIterator iterator (int maxlen) const; - /* Creates an iterator, returning the positions in ascending order. */ - PositionReverseIterator reviterator () const; - /* Creates an iterator, returning the positions in ascending order, - that apply to strings of length <= maxlen. */ - PositionReverseIterator reviterator (int maxlen) const; - - /* Set operations. Assumes the array is in reverse order. */ - bool contains (int pos) const; - void add (int pos); - void remove (int pos); - - /* Output in external syntax. */ - void print () const; - -private: - /* The special case denoted by '*'. */ - bool _useall; - /* Number of positions. */ - unsigned int _size; - /* Array of positions. 0 for the first char, 1 for the second char etc., - LASTCHAR for the last char. */ - int _positions[MAX_SIZE]; -}; - -/* This class denotes an iterator through a set of byte positions. */ - -class PositionIterator -{ - friend class Positions; -public: - /* Copy constructor. */ - PositionIterator (const PositionIterator& src); - - /* End of iteration marker. */ - enum { EOS = -2 }; - - /* Retrieves the next position, or EOS past the end. */ - int next (); - - /* Returns the number of remaining positions, i.e. how often next() will - return a value != EOS. */ - unsigned int remaining () const; - -private: - /* Initializes an iterator through POSITIONS. */ - PositionIterator (Positions const& positions); - /* Initializes an iterator through POSITIONS, ignoring positions >= maxlen. */ - PositionIterator (Positions const& positions, int maxlen); - - const Positions& _set; - unsigned int _index; -}; - -/* This class denotes an iterator in reverse direction through a set of - byte positions. */ - -class PositionReverseIterator -{ - friend class Positions; -public: - /* Copy constructor. */ - PositionReverseIterator (const PositionReverseIterator& src); - - /* End of iteration marker. */ - enum { EOS = -2 }; - - /* Retrieves the next position, or EOS past the end. */ - int next (); - - /* Returns the number of remaining positions, i.e. how often next() will - return a value != EOS. */ - unsigned int remaining () const; - -private: - /* Initializes an iterator through POSITIONS. */ - PositionReverseIterator (Positions const& positions); - /* Initializes an iterator through POSITIONS, ignoring positions >= maxlen. */ - PositionReverseIterator (Positions const& positions, int maxlen); - - const Positions& _set; - unsigned int _index; - unsigned int _minindex; -}; - -#ifdef __OPTIMIZE__ - -#include -#define INLINE inline -#include "positions.icc" -#undef INLINE - -#endif - -#endif diff --git a/contrib/gperf/src/positions.icc b/contrib/gperf/src/positions.icc deleted file mode 100644 index c0be81b7c00c..000000000000 --- a/contrib/gperf/src/positions.icc +++ /dev/null @@ -1,285 +0,0 @@ -/* Inline Functions for positions.{h,cc}. - - Copyright (C) 1989-1998, 2000, 2002 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -// This needs: -//#include - -/* ---------------------------- Class Positions ---------------------------- */ - -/* Constructors. */ - -INLINE -Positions::Positions () - : _useall (false), - _size (0) -{ -} - -INLINE -Positions::Positions (int pos1) - : _useall (false), - _size (1) -{ - _positions[0] = pos1; -} - -INLINE -Positions::Positions (int pos1, int pos2) - : _useall (false), - _size (2) -{ - _positions[0] = pos1; - _positions[1] = pos2; -} - -/* Copy constructor. */ - -INLINE -Positions::Positions (const Positions& src) - : _useall (src._useall), - _size (src._size) -{ - memcpy (_positions, src._positions, _size * sizeof (_positions[0])); -} - -/* Assignment operator. */ - -INLINE Positions& -Positions::operator= (const Positions& src) -{ - _useall = src._useall; - _size = src._size; - memcpy (_positions, src._positions, _size * sizeof (_positions[0])); - return *this; -} - -/* Accessors. */ - -INLINE bool -Positions::is_useall () const -{ - return _useall; -} - -INLINE int -Positions::operator[] (unsigned int index) const -{ - return _positions[index]; -} - -INLINE unsigned int -Positions::get_size () const -{ - return _size; -} - -/* Write access. */ - -INLINE void -Positions::set_useall (bool useall) -{ - _useall = useall; - if (useall) - { - /* The positions are 0, 1, ..., MAX_KEY_POS-1, in descending order. */ - _size = MAX_KEY_POS; - int *ptr = _positions; - for (int i = MAX_KEY_POS - 1; i >= 0; i--) - *ptr++ = i; - } -} - -INLINE int * -Positions::pointer () -{ - return _positions; -} - -INLINE void -Positions::set_size (unsigned int size) -{ - _size = size; -} - -/* Sorts the array in reverse order. - Returns true if there are no duplicates, false otherwise. */ -INLINE bool -Positions::sort () -{ - if (_useall) - return true; - - /* Bubble sort. */ - bool duplicate_free = true; - int *base = _positions; - unsigned int len = _size; - - for (unsigned int i = 1; i < len; i++) - { - unsigned int j; - int tmp; - - for (j = i, tmp = base[j]; j > 0 && tmp >= base[j - 1]; j--) - if ((base[j] = base[j - 1]) == tmp) /* oh no, a duplicate!!! */ - duplicate_free = false; - - base[j] = tmp; - } - - return duplicate_free; -} - -/* Creates an iterator, returning the positions in descending order. */ -INLINE PositionIterator -Positions::iterator () const -{ - return PositionIterator (*this); -} - -/* Creates an iterator, returning the positions in descending order, - that apply to strings of length <= maxlen. */ -INLINE PositionIterator -Positions::iterator (int maxlen) const -{ - return PositionIterator (*this, maxlen); -} - -/* Creates an iterator, returning the positions in ascending order. */ -INLINE PositionReverseIterator -Positions::reviterator () const -{ - return PositionReverseIterator (*this); -} - -/* Creates an iterator, returning the positions in ascending order, - that apply to strings of length <= maxlen. */ -INLINE PositionReverseIterator -Positions::reviterator (int maxlen) const -{ - return PositionReverseIterator (*this, maxlen); -} - -/* ------------------------- Class PositionIterator ------------------------ */ - -/* Initializes an iterator through POSITIONS. */ -INLINE -PositionIterator::PositionIterator (Positions const& positions) - : _set (positions), - _index (0) -{ -} - -/* Initializes an iterator through POSITIONS, ignoring positions >= maxlen. */ -INLINE -PositionIterator::PositionIterator (Positions const& positions, int maxlen) - : _set (positions) -{ - if (positions._useall) - _index = (maxlen <= Positions::MAX_KEY_POS ? Positions::MAX_KEY_POS - maxlen : 0); - else - { - unsigned int index; - for (index = 0; - index < positions._size && positions._positions[index] >= maxlen; - index++) - ; - _index = index; - } -} - -/* Retrieves the next position, or EOS past the end. */ -INLINE int -PositionIterator::next () -{ - return (_index < _set._size ? _set._positions[_index++] : EOS); -} - -/* Returns the number of remaining positions, i.e. how often next() will - return a value != EOS. */ -INLINE unsigned int -PositionIterator::remaining () const -{ - return _set._size - _index; -} - -/* Copy constructor. */ -INLINE -PositionIterator::PositionIterator (const PositionIterator& src) - : _set (src._set), - _index (src._index) -{ -} - -/* --------------------- Class PositionReverseIterator --------------------- */ - -/* Initializes an iterator through POSITIONS. */ -INLINE -PositionReverseIterator::PositionReverseIterator (Positions const& positions) - : _set (positions), - _index (_set._size), - _minindex (0) -{ -} - -/* Initializes an iterator through POSITIONS, ignoring positions >= maxlen. */ -INLINE -PositionReverseIterator::PositionReverseIterator (Positions const& positions, int maxlen) - : _set (positions), - _index (_set._size) -{ - if (positions._useall) - _minindex = (maxlen <= Positions::MAX_KEY_POS ? Positions::MAX_KEY_POS - maxlen : 0); - else - { - unsigned int index; - for (index = 0; - index < positions._size && positions._positions[index] >= maxlen; - index++) - ; - _minindex = index; - } -} - -/* Retrieves the next position, or EOS past the end. */ -INLINE int -PositionReverseIterator::next () -{ - return (_index > _minindex ? _set._positions[--_index] : EOS); -} - -/* Returns the number of remaining positions, i.e. how often next() will - return a value != EOS. */ -INLINE unsigned int -PositionReverseIterator::remaining () const -{ - return _index - _minindex; -} - -/* Copy constructor. */ -INLINE -PositionReverseIterator::PositionReverseIterator (const PositionReverseIterator& src) - : _set (src._set), - _index (src._index), - _minindex (src._minindex) -{ -} diff --git a/contrib/gperf/src/search.cc b/contrib/gperf/src/search.cc deleted file mode 100644 index 956b5bed07bc..000000000000 --- a/contrib/gperf/src/search.cc +++ /dev/null @@ -1,1687 +0,0 @@ -/* Search algorithm. - Copyright (C) 1989-1998, 2000, 2002 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Specification. */ -#include "search.h" - -#include -#include /* declares exit(), rand(), srand() */ -#include /* declares memset(), memcmp() */ -#include /* declares time() */ -#include /* declares exp() */ -#include /* defines INT_MIN, INT_MAX, UINT_MAX */ -#include "options.h" -#include "hash-table.h" -#include "config.h" - -/* ============================== Portability ============================== */ - -/* Assume ISO C++ 'for' scoping rule. */ -/* This code is used to work around scoping issues with visual studio 6 from - * 1998. Comment it out here to queisce numerous -Wdangling-else warnings - * from clang. -#define for if (0) ; else for */ - -/* Dynamically allocated array with dynamic extent: - - Example: - DYNAMIC_ARRAY (my_array, int, n); - ... - FREE_DYNAMIC_ARRAY (my_array); - - Attention: depending on your implementation my_array is either the array - itself or a pointer to the array! Always use my_array only as expression! - */ -#if HAVE_DYNAMIC_ARRAY - #define DYNAMIC_ARRAY(var,eltype,size) eltype var[size] - #define FREE_DYNAMIC_ARRAY(var) -#else - #define DYNAMIC_ARRAY(var,eltype,size) eltype *var = new eltype[size] - #define FREE_DYNAMIC_ARRAY(var) delete[] var -#endif - -/* ================================ Theory ================================= */ - -/* The general form of the hash function is - - hash (keyword) = sum (asso_values[keyword[i] + alpha_inc[i]] : i in Pos) - + len (keyword) - - where Pos is a set of byte positions, - each alpha_inc[i] is a nonnegative integer, - each asso_values[c] is a nonnegative integer, - len (keyword) is the keyword's length if !option[NOLENGTH], or 0 otherwise. - - Theorem 1: If all keywords are different, there is a set Pos such that - all tuples (keyword[i] : i in Pos) are different. - - Theorem 2: If all tuples (keyword[i] : i in Pos) are different, there - are nonnegative integers alpha_inc[i] such that all multisets - {keyword[i] + alpha_inc[i] : i in Pos} are different. - - Define selchars[keyword] := {keyword[i] + alpha_inc[i] : i in Pos}. - - Theorem 3: If all multisets selchars[keyword] are different, there are - nonnegative integers asso_values[c] such that all hash values - sum (asso_values[c] : c in selchars[keyword]) are different. - - Based on these three facts, we find the hash function in three steps: - - Step 1 (Finding good byte positions): - Find a set Pos, as small as possible, such that all tuples - (keyword[i] : i in Pos) are different. - - Step 2 (Finding good alpha increments): - Find nonnegative integers alpha_inc[i], as many of them as possible being - zero, and the others being as small as possible, such that all multisets - {keyword[i] + alpha_inc[i] : i in Pos} are different. - - Step 3 (Finding good asso_values): - Find asso_values[c] such that all hash (keyword) are different. - - In other words, each step finds a projection that is injective on the - given finite set: - proj1 : String --> Map (Pos --> N) - proj2 : Map (Pos --> N) --> Map (Pos --> N) / S(Pos) - proj3 : Map (Pos --> N) / S(Pos) --> N - where - N denotes the set of nonnegative integers, - Map (A --> B) := Hom_Set (A, B) is the set of maps from A to B, and - S(Pos) is the symmetric group over Pos. - - This was the theory for option[NOLENGTH]; if !option[NOLENGTH], slight - modifications apply: - proj1 : String --> Map (Pos --> N) x N - proj2 : Map (Pos --> N) x N --> Map (Pos --> N) / S(Pos) x N - proj3 : Map (Pos --> N) / S(Pos) x N --> N - - For a case-insensitive hash function, the general form is - - hash (keyword) = - sum (asso_values[alpha_unify[keyword[i] + alpha_inc[i]]] : i in Pos) - + len (keyword) - - where alpha_unify[c] is chosen so that an upper/lower case change in - keyword[i] doesn't change alpha_unify[keyword[i] + alpha_inc[i]]. - */ - -/* ==================== Initialization and Preparation ===================== */ - -Search::Search (KeywordExt_List *list) - : _head (list) -{ -} - -void -Search::prepare () -{ - /* Compute the total number of keywords. */ - _total_keys = 0; - for (KeywordExt_List *temp = _head; temp; temp = temp->rest()) - _total_keys++; - - /* Compute the minimum and maximum keyword length. */ - _max_key_len = INT_MIN; - _min_key_len = INT_MAX; - for (KeywordExt_List *temp = _head; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - - if (_max_key_len < keyword->_allchars_length) - _max_key_len = keyword->_allchars_length; - if (_min_key_len > keyword->_allchars_length) - _min_key_len = keyword->_allchars_length; - } - - /* Exit program if an empty string is used as keyword, since the comparison - expressions don't work correctly for looking up an empty string. */ - if (_min_key_len == 0) - { - fprintf (stderr, "Empty input keyword is not allowed.\n" - "To recognize an empty input keyword, your code should check for\n" - "len == 0 before calling the gperf generated lookup function.\n"); - exit (1); - } - - /* Exit program if the characters in the keywords are not in the required - range. */ - if (option[SEVENBIT]) - for (KeywordExt_List *temp = _head; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - - const char *k = keyword->_allchars; - for (int i = keyword->_allchars_length; i > 0; k++, i--) - if (!(static_cast(*k) < 128)) - { - fprintf (stderr, "Option --seven-bit has been specified,\n" - "but keyword \"%.*s\" contains non-ASCII characters.\n" - "Try removing option --seven-bit.\n", - keyword->_allchars_length, keyword->_allchars); - exit (1); - } - } -} - -/* ====================== Finding good byte positions ====================== */ - -/* Computes the upper bound on the indices passed to asso_values[], - assuming no alpha_increments. */ -unsigned int -Search::compute_alpha_size () const -{ - return (option[SEVENBIT] ? 128 : 256); -} - -/* Computes the unification rules between different asso_values[c], - assuming no alpha_increments. */ -unsigned int * -Search::compute_alpha_unify () const -{ - if (option[UPPERLOWER]) - { - /* Uppercase to lowercase mapping. */ - unsigned int alpha_size = compute_alpha_size(); - unsigned int *alpha_unify = new unsigned int[alpha_size]; - for (unsigned int c = 0; c < alpha_size; c++) - alpha_unify[c] = c; - for (unsigned int c = 'A'; c <= 'Z'; c++) - alpha_unify[c] = c + ('a'-'A'); - return alpha_unify; - } - else - /* Identity mapping. */ - return NULL; -} - -/* Initializes each keyword's _selchars array. */ -void -Search::init_selchars_tuple (const Positions& positions, const unsigned int *alpha_unify) const -{ - for (KeywordExt_List *temp = _head; temp; temp = temp->rest()) - temp->first()->init_selchars_tuple(positions, alpha_unify); -} - -/* Deletes each keyword's _selchars array. */ -void -Search::delete_selchars () const -{ - for (KeywordExt_List *temp = _head; temp; temp = temp->rest()) - temp->first()->delete_selchars(); -} - -/* Count the duplicate keywords that occur with a given set of positions. - In other words, it returns the difference - # K - # proj1 (K) - where K is the multiset of given keywords. */ -unsigned int -Search::count_duplicates_tuple (const Positions& positions, const unsigned int *alpha_unify) const -{ - /* Run through the keyword list and count the duplicates incrementally. - The result does not depend on the order of the keyword list, thanks to - the formula above. */ - init_selchars_tuple (positions, alpha_unify); - - unsigned int count = 0; - { - Hash_Table representatives (_total_keys, option[NOLENGTH]); - for (KeywordExt_List *temp = _head; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - if (representatives.insert (keyword)) - count++; - } - } - - delete_selchars (); - - return count; -} - -/* Find good key positions. */ - -void -Search::find_positions () -{ - /* If the user gave the key positions, we use them. */ - if (option[POSITIONS]) - { - _key_positions = option.get_key_positions(); - return; - } - - /* Compute preliminary alpha_unify table. */ - unsigned int *alpha_unify = compute_alpha_unify (); - - /* 1. Find positions that must occur in order to distinguish duplicates. */ - Positions mandatory; - - if (!option[DUP]) - { - for (KeywordExt_List *l1 = _head; l1 && l1->rest(); l1 = l1->rest()) - { - KeywordExt *keyword1 = l1->first(); - for (KeywordExt_List *l2 = l1->rest(); l2; l2 = l2->rest()) - { - KeywordExt *keyword2 = l2->first(); - - /* If keyword1 and keyword2 have the same length and differ - in just one position, and it is not the last character, - this position is mandatory. */ - if (keyword1->_allchars_length == keyword2->_allchars_length) - { - int n = keyword1->_allchars_length; - int i; - for (i = 0; i < n - 1; i++) - { - unsigned char c1 = keyword1->_allchars[i]; - unsigned char c2 = keyword2->_allchars[i]; - if (option[UPPERLOWER]) - { - if (c1 >= 'A' && c1 <= 'Z') - c1 += 'a' - 'A'; - if (c2 >= 'A' && c2 <= 'Z') - c2 += 'a' - 'A'; - } - if (c1 != c2) - break; - } - if (i < n - 1) - { - int j; - for (j = i + 1; j < n; j++) - { - unsigned char c1 = keyword1->_allchars[j]; - unsigned char c2 = keyword2->_allchars[j]; - if (option[UPPERLOWER]) - { - if (c1 >= 'A' && c1 <= 'Z') - c1 += 'a' - 'A'; - if (c2 >= 'A' && c2 <= 'Z') - c2 += 'a' - 'A'; - } - if (c1 != c2) - break; - } - if (j >= n) - { - /* Position i is mandatory. */ - if (!mandatory.contains (i)) - mandatory.add (i); - } - } - } - } - } - } - - /* 2. Add positions, as long as this decreases the duplicates count. */ - int imax = (_max_key_len - 1 < Positions::MAX_KEY_POS - 1 - ? _max_key_len - 1 : Positions::MAX_KEY_POS - 1); - Positions current = mandatory; - unsigned int current_duplicates_count = - count_duplicates_tuple (current, alpha_unify); - for (;;) - { - Positions best; - unsigned int best_duplicates_count = UINT_MAX; - - for (int i = imax; i >= -1; i--) - if (!current.contains (i)) - { - Positions tryal = current; - tryal.add (i); - unsigned int try_duplicates_count = - count_duplicates_tuple (tryal, alpha_unify); - - /* We prefer 'try' to 'best' if it produces less duplicates, - or if it produces the same number of duplicates but with - a more efficient hash function. */ - if (try_duplicates_count < best_duplicates_count - || (try_duplicates_count == best_duplicates_count && i >= 0)) - { - best = tryal; - best_duplicates_count = try_duplicates_count; - } - } - - /* Stop adding positions when it gives no improvement. */ - if (best_duplicates_count >= current_duplicates_count) - break; - - current = best; - current_duplicates_count = best_duplicates_count; - } - - /* 3. Remove positions, as long as this doesn't increase the duplicates - count. */ - for (;;) - { - Positions best; - unsigned int best_duplicates_count = UINT_MAX; - - for (int i = imax; i >= -1; i--) - if (current.contains (i) && !mandatory.contains (i)) - { - Positions tryal = current; - tryal.remove (i); - unsigned int try_duplicates_count = - count_duplicates_tuple (tryal, alpha_unify); - - /* We prefer 'try' to 'best' if it produces less duplicates, - or if it produces the same number of duplicates but with - a more efficient hash function. */ - if (try_duplicates_count < best_duplicates_count - || (try_duplicates_count == best_duplicates_count && i == -1)) - { - best = tryal; - best_duplicates_count = try_duplicates_count; - } - } - - /* Stop removing positions when it gives no improvement. */ - if (best_duplicates_count > current_duplicates_count) - break; - - current = best; - current_duplicates_count = best_duplicates_count; - } - - /* 4. Replace two positions by one, as long as this doesn't increase the - duplicates count. */ - for (;;) - { - Positions best; - unsigned int best_duplicates_count = UINT_MAX; - - for (int i1 = imax; i1 >= -1; i1--) - if (current.contains (i1) && !mandatory.contains (i1)) - for (int i2 = imax; i2 >= -1; i2--) - if (current.contains (i2) && !mandatory.contains (i2) && i2 != i1) - for (int i3 = imax; i3 >= 0; i3--) - if (!current.contains (i3)) - { - Positions tryal = current; - tryal.remove (i1); - tryal.remove (i2); - tryal.add (i3); - unsigned int try_duplicates_count = - count_duplicates_tuple (tryal, alpha_unify); - - /* We prefer 'try' to 'best' if it produces less duplicates, - or if it produces the same number of duplicates but with - a more efficient hash function. */ - if (try_duplicates_count < best_duplicates_count - || (try_duplicates_count == best_duplicates_count - && (i1 == -1 || i2 == -1 || i3 >= 0))) - { - best = tryal; - best_duplicates_count = try_duplicates_count; - } - } - - /* Stop removing positions when it gives no improvement. */ - if (best_duplicates_count > current_duplicates_count) - break; - - current = best; - current_duplicates_count = best_duplicates_count; - } - - /* That's it. Hope it's good enough. */ - _key_positions = current; - - if (option[DEBUG]) - { - /* Print the result. */ - fprintf (stderr, "\nComputed positions: "); - PositionReverseIterator iter = _key_positions.reviterator(); - bool seen_lastchar = false; - bool first = true; - for (int i; (i = iter.next ()) != PositionReverseIterator::EOS; ) - { - if (!first) - fprintf (stderr, ", "); - if (i == Positions::LASTCHAR) - seen_lastchar = true; - else - { - fprintf (stderr, "%d", i + 1); - first = false; - } - } - if (seen_lastchar) - { - if (!first) - fprintf (stderr, ", "); - fprintf (stderr, "$"); - } - fprintf (stderr, "\n"); - } - - /* Free preliminary alpha_unify table. */ - delete[] alpha_unify; -} - -/* Count the duplicate keywords that occur with the found set of positions. - In other words, it returns the difference - # K - # proj1 (K) - where K is the multiset of given keywords. */ -unsigned int -Search::count_duplicates_tuple () const -{ - unsigned int *alpha_unify = compute_alpha_unify (); - unsigned int count = count_duplicates_tuple (_key_positions, alpha_unify); - delete[] alpha_unify; - return count; -} - -/* ===================== Finding good alpha increments ===================== */ - -/* Computes the upper bound on the indices passed to asso_values[]. */ -unsigned int -Search::compute_alpha_size (const unsigned int *alpha_inc) const -{ - unsigned int max_alpha_inc = 0; - for (int i = 0; i < _max_key_len; i++) - if (max_alpha_inc < alpha_inc[i]) - max_alpha_inc = alpha_inc[i]; - return (option[SEVENBIT] ? 128 : 256) + max_alpha_inc; -} - -/* Computes the unification rules between different asso_values[c]. */ -unsigned int * -Search::compute_alpha_unify (const Positions& positions, const unsigned int *alpha_inc) const -{ - if (option[UPPERLOWER]) - { - /* Without alpha increments, we would simply unify - 'A' -> 'a', ..., 'Z' -> 'z'. - But when a keyword contains at position i a character c, - we have the constraint - asso_values[tolower(c) + alpha_inc[i]] == - asso_values[toupper(c) + alpha_inc[i]]. - This introduces a unification - toupper(c) + alpha_inc[i] -> tolower(c) + alpha_inc[i]. - Note that this unification can extend outside the range of - ASCII letters! But still every unified character pair is at - a distance of 'a'-'A' = 32, or (after chained unification) - at a multiple of 32. So in the end the alpha_unify vector has - the form c -> c + 32 * f(c) where f(c) is a nonnegative - integer. */ - unsigned int alpha_size = compute_alpha_size (alpha_inc); - - unsigned int *alpha_unify = new unsigned int[alpha_size]; - for (unsigned int c = 0; c < alpha_size; c++) - alpha_unify[c] = c; - - for (KeywordExt_List *temp = _head; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - - /* Iterate through the selected character positions. */ - PositionIterator iter = positions.iterator(keyword->_allchars_length); - - for (int i; (i = iter.next ()) != PositionIterator::EOS; ) - { - unsigned int c; - if (i == Positions::LASTCHAR) - c = static_cast(keyword->_allchars[keyword->_allchars_length - 1]); - else if (i < keyword->_allchars_length) - c = static_cast(keyword->_allchars[i]); - else - abort (); - if (c >= 'A' && c <= 'Z') - c += 'a' - 'A'; - if (c >= 'a' && c <= 'z') - { - if (i != Positions::LASTCHAR) - c += alpha_inc[i]; - /* Unify c with c - ('a'-'A'). */ - unsigned int d = alpha_unify[c]; - unsigned int b = c - ('a'-'A'); - for (int a = b; a >= 0 && alpha_unify[a] == b; a -= ('a'-'A')) - alpha_unify[a] = d; - } - } - } - return alpha_unify; - } - else - /* Identity mapping. */ - return NULL; -} - -/* Initializes each keyword's _selchars array. */ -void -Search::init_selchars_multiset (const Positions& positions, const unsigned int *alpha_unify, const unsigned int *alpha_inc) const -{ - for (KeywordExt_List *temp = _head; temp; temp = temp->rest()) - temp->first()->init_selchars_multiset(positions, alpha_unify, alpha_inc); -} - -/* Count the duplicate keywords that occur with the given set of positions - and a given alpha_inc[] array. - In other words, it returns the difference - # K - # proj2 (proj1 (K)) - where K is the multiset of given keywords. */ -unsigned int -Search::count_duplicates_multiset (const unsigned int *alpha_inc) const -{ - /* Run through the keyword list and count the duplicates incrementally. - The result does not depend on the order of the keyword list, thanks to - the formula above. */ - unsigned int *alpha_unify = compute_alpha_unify (_key_positions, alpha_inc); - init_selchars_multiset (_key_positions, alpha_unify, alpha_inc); - - unsigned int count = 0; - { - Hash_Table representatives (_total_keys, option[NOLENGTH]); - for (KeywordExt_List *temp = _head; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - if (representatives.insert (keyword)) - count++; - } - } - - delete_selchars (); - delete[] alpha_unify; - - return count; -} - -/* Find good _alpha_inc[]. */ - -void -Search::find_alpha_inc () -{ - /* The goal is to choose _alpha_inc[] such that it doesn't introduce - artificial duplicates. - In other words, the goal is # proj2 (proj1 (K)) = # proj1 (K). */ - unsigned int duplicates_goal = count_duplicates_tuple (); - - /* Start with zero increments. This is sufficient in most cases. */ - unsigned int *current = new unsigned int [_max_key_len]; - for (int i = 0; i < _max_key_len; i++) - current[i] = 0; - unsigned int current_duplicates_count = count_duplicates_multiset (current); - - if (current_duplicates_count > duplicates_goal) - { - /* Look which _alpha_inc[i] we are free to increment. */ - unsigned int nindices; - { - nindices = 0; - PositionIterator iter = _key_positions.iterator(_max_key_len); - for (;;) - { - int key_pos = iter.next (); - if (key_pos == PositionIterator::EOS) - break; - if (key_pos != Positions::LASTCHAR) - nindices++; - } - } - - DYNAMIC_ARRAY (indices, unsigned int, nindices); - { - unsigned int j = 0; - PositionIterator iter = _key_positions.iterator(_max_key_len); - for (;;) - { - int key_pos = iter.next (); - if (key_pos == PositionIterator::EOS) - break; - if (key_pos != Positions::LASTCHAR) - indices[j++] = key_pos; - } - if (!(j == nindices)) - abort (); - } - - /* Perform several rounds of searching for a good alpha increment. - Each round reduces the number of artificial collisions by adding - an increment in a single key position. */ - DYNAMIC_ARRAY (best, unsigned int, _max_key_len); - DYNAMIC_ARRAY (tryal, unsigned int, _max_key_len); - do - { - /* An increment of 1 is not always enough. Try higher increments - also. */ - for (unsigned int inc = 1; ; inc++) - { - unsigned int best_duplicates_count = UINT_MAX; - - for (unsigned int j = 0; j < nindices; j++) - { - memcpy (tryal, current, _max_key_len * sizeof (unsigned int)); - tryal[indices[j]] += inc; - unsigned int try_duplicates_count = - count_duplicates_multiset (tryal); - - /* We prefer 'try' to 'best' if it produces less - duplicates. */ - if (try_duplicates_count < best_duplicates_count) - { - memcpy (best, tryal, _max_key_len * sizeof (unsigned int)); - best_duplicates_count = try_duplicates_count; - } - } - - /* Stop this round when we got an improvement. */ - if (best_duplicates_count < current_duplicates_count) - { - memcpy (current, best, _max_key_len * sizeof (unsigned int)); - current_duplicates_count = best_duplicates_count; - break; - } - } - } - while (current_duplicates_count > duplicates_goal); - FREE_DYNAMIC_ARRAY (tryal); - FREE_DYNAMIC_ARRAY (best); - - if (option[DEBUG]) - { - /* Print the result. */ - fprintf (stderr, "\nComputed alpha increments: "); - bool first = true; - for (unsigned int j = nindices; j-- > 0; ) - if (current[indices[j]] != 0) - { - if (!first) - fprintf (stderr, ", "); - fprintf (stderr, "%u:+%u", - indices[j] + 1, current[indices[j]]); - first = false; - } - fprintf (stderr, "\n"); - } - FREE_DYNAMIC_ARRAY (indices); - } - - _alpha_inc = current; - _alpha_size = compute_alpha_size (_alpha_inc); - _alpha_unify = compute_alpha_unify (_key_positions, _alpha_inc); -} - -/* ======================= Finding good asso_values ======================== */ - -/* Initializes the asso_values[] related parameters. */ - -void -Search::prepare_asso_values () -{ - KeywordExt_List *temp; - - /* Initialize each keyword's _selchars array. */ - init_selchars_multiset(_key_positions, _alpha_unify, _alpha_inc); - - /* Compute the maximum _selchars_length over all keywords. */ - _max_selchars_length = _key_positions.iterator(_max_key_len).remaining(); - - /* Check for duplicates, i.e. keywords with the same _selchars array - (and - if !option[NOLENGTH] - also the same length). - We deal with these by building an equivalence class, so that only - 1 keyword is representative of the entire collection. Only this - representative remains in the keyword list; the others are accessible - through the _duplicate_link chain, starting at the representative. - This *greatly* simplifies processing during later stages of the program. - Set _total_duplicates and _list_len = _total_keys - _total_duplicates. */ - { - _list_len = _total_keys; - _total_duplicates = 0; - /* Make hash table for efficiency. */ - Hash_Table representatives (_list_len, option[NOLENGTH]); - - KeywordExt_List *prev = NULL; /* list node before temp */ - for (temp = _head; temp; ) - { - KeywordExt *keyword = temp->first(); - KeywordExt *other_keyword = representatives.insert (keyword); - KeywordExt_List *garbage = NULL; - - if (other_keyword) - { - _total_duplicates++; - _list_len--; - /* Remove keyword from the main list. */ - prev->rest() = temp->rest(); - garbage = temp; - /* And insert it on other_keyword's duplicate list. */ - keyword->_duplicate_link = other_keyword->_duplicate_link; - other_keyword->_duplicate_link = keyword; - - /* Complain if user hasn't enabled the duplicate option. */ - if (!option[DUP] || option[DEBUG]) - { - fprintf (stderr, "Key link: \"%.*s\" = \"%.*s\", with key set \"", - keyword->_allchars_length, keyword->_allchars, - other_keyword->_allchars_length, other_keyword->_allchars); - for (int j = 0; j < keyword->_selchars_length; j++) - putc (keyword->_selchars[j], stderr); - fprintf (stderr, "\".\n"); - } - } - else - { - keyword->_duplicate_link = NULL; - prev = temp; - } - temp = temp->rest(); - if (garbage) - delete garbage; - } - if (option[DEBUG]) - representatives.dump(); - } - - /* Exit program if duplicates exists and option[DUP] not set, since we - don't want to continue in this case. (We don't want to turn on - option[DUP] implicitly, because the generated code is usually much - slower. */ - if (_total_duplicates) - { - if (option[DUP]) - fprintf (stderr, "%d input keys have identical hash values, examine output carefully...\n", - _total_duplicates); - else - { - fprintf (stderr, "%d input keys have identical hash values,\n", - _total_duplicates); - if (option[POSITIONS]) - fprintf (stderr, "try different key positions or use option -D.\n"); - else - fprintf (stderr, "use option -D.\n"); - exit (1); - } - } - - /* Compute the occurrences of each character in the alphabet. */ - _occurrences = new int[_alpha_size]; - memset (_occurrences, 0, _alpha_size * sizeof (_occurrences[0])); - for (temp = _head; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - const unsigned int *ptr = keyword->_selchars; - for (int count = keyword->_selchars_length; count > 0; ptr++, count--) - _occurrences[*ptr]++; - } - - /* Memory allocation. */ - _asso_values = new int[_alpha_size]; - - int non_linked_length = _list_len; - unsigned int asso_value_max; - - asso_value_max = - static_cast(non_linked_length * option.get_size_multiple()); - /* Round up to the next power of two. This makes it easy to ensure - an _asso_value[c] is >= 0 and < asso_value_max. Also, the jump value - being odd, it guarantees that Search::try_asso_value() will iterate - through different values for _asso_value[c]. */ - if (asso_value_max == 0) - asso_value_max = 1; - asso_value_max |= asso_value_max >> 1; - asso_value_max |= asso_value_max >> 2; - asso_value_max |= asso_value_max >> 4; - asso_value_max |= asso_value_max >> 8; - asso_value_max |= asso_value_max >> 16; - asso_value_max++; - _asso_value_max = asso_value_max; - - /* Given the bound for _asso_values[c], we have a bound for the possible - hash values, as computed in compute_hash(). */ - _max_hash_value = (option[NOLENGTH] ? 0 : _max_key_len) - + (_asso_value_max - 1) * _max_selchars_length; - /* Allocate a sparse bit vector for detection of collisions of hash - values. */ - _collision_detector = new Bool_Array (_max_hash_value + 1); - - if (option[DEBUG]) - { - fprintf (stderr, "total non-linked keys = %d\nmaximum associated value is %d" - "\nmaximum size of generated hash table is %d\n", - non_linked_length, asso_value_max, _max_hash_value); - - int field_width; - - field_width = 0; - { - for (KeywordExt_List *temp = _head; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - if (field_width < keyword->_selchars_length) - field_width = keyword->_selchars_length; - } - } - - fprintf (stderr, "\ndumping the keyword list without duplicates\n"); - fprintf (stderr, "keyword #, %*s, keyword\n", field_width, "keysig"); - int i = 0; - for (KeywordExt_List *temp = _head; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - fprintf (stderr, "%9d, ", ++i); - if (field_width > keyword->_selchars_length) - fprintf (stderr, "%*s", field_width - keyword->_selchars_length, ""); - for (int j = 0; j < keyword->_selchars_length; j++) - putc (keyword->_selchars[j], stderr); - fprintf (stderr, ", %.*s\n", - keyword->_allchars_length, keyword->_allchars); - } - fprintf (stderr, "\nend of keyword list\n\n"); - } - - if (option[RANDOM] || option.get_jump () == 0) - /* We will use rand(), so initialize the random number generator. */ - srand (static_cast(time (0))); - - _initial_asso_value = (option[RANDOM] ? -1 : option.get_initial_asso_value ()); - _jump = option.get_jump (); -} - -/* Finds some _asso_values[] that fit. */ - -/* The idea is to choose the _asso_values[] one by one, in a way that - a choice that has been made never needs to be undone later. This - means that we split the work into several steps. Each step chooses - one or more _asso_values[c]. The result of choosing one or more - _asso_values[c] is that the partitioning of the keyword set gets - broader. - Look at this partitioning: After every step, the _asso_values[] of a - certain set C of characters are undetermined. (At the beginning, C - is the set of characters c with _occurrences[c] > 0. At the end, C - is empty.) To each keyword K, we associate the multiset of _selchars - for which the _asso_values[] are undetermined: - K --> K->_selchars intersect C. - Consider two keywords equivalent if their value under this mapping is - the same. This introduces an equivalence relation on the set of - keywords. The equivalence classes partition the keyword set. (At the - beginning, the partition is the finest possible: each K is an equivalence - class by itself, because all K have a different _selchars. At the end, - all K have been merged into a single equivalence class.) - The partition before a step is always a refinement of the partition - after the step. - We choose the steps in such a way that the partition really becomes - broader at each step. (A step that only chooses an _asso_values[c] - without changing the partition is better merged with the previous step, - to avoid useless backtracking.) */ - -struct EquivalenceClass -{ - /* The keywords in this equivalence class. */ - KeywordExt_List * _keywords; - KeywordExt_List * _keywords_last; - /* The number of keywords in this equivalence class. */ - unsigned int _cardinality; - /* The undetermined selected characters for the keywords in this - equivalence class, as a canonically reordered multiset. */ - unsigned int * _undetermined_chars; - unsigned int _undetermined_chars_length; - - EquivalenceClass * _next; -}; - -struct Step -{ - /* The characters whose values are being determined in this step. */ - unsigned int _changing_count; - unsigned int * _changing; - /* Exclusive upper bound for the _asso_values[c] of this step. - A power of 2. */ - unsigned int _asso_value_max; - /* The characters whose values will be determined after this step. */ - bool * _undetermined; - /* The keyword set partition after this step. */ - EquivalenceClass * _partition; - /* The expected number of iterations in this step. */ - double _expected_lower; - double _expected_upper; - - Step * _next; -}; - -static inline bool -equals (const unsigned int *ptr1, const unsigned int *ptr2, unsigned int len) -{ - while (len > 0) - { - if (*ptr1 != *ptr2) - return false; - ptr1++; - ptr2++; - len--; - } - return true; -} - -EquivalenceClass * -Search::compute_partition (bool *undetermined) const -{ - EquivalenceClass *partition = NULL; - EquivalenceClass *partition_last = NULL; - for (KeywordExt_List *temp = _head; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - - /* Compute the undetermined characters for this keyword. */ - unsigned int *undetermined_chars = - new unsigned int[keyword->_selchars_length]; - unsigned int undetermined_chars_length = 0; - - for (int i = 0; i < keyword->_selchars_length; i++) - if (undetermined[keyword->_selchars[i]]) - undetermined_chars[undetermined_chars_length++] = keyword->_selchars[i]; - - /* Look up the equivalence class to which this keyword belongs. */ - EquivalenceClass *equclass; - for (equclass = partition; equclass; equclass = equclass->_next) - if (equclass->_undetermined_chars_length == undetermined_chars_length - && equals (equclass->_undetermined_chars, undetermined_chars, - undetermined_chars_length)) - break; - if (equclass == NULL) - { - equclass = new EquivalenceClass(); - equclass->_keywords = NULL; - equclass->_keywords_last = NULL; - equclass->_cardinality = 0; - equclass->_undetermined_chars = undetermined_chars; - equclass->_undetermined_chars_length = undetermined_chars_length; - equclass->_next = NULL; - if (partition) - partition_last->_next = equclass; - else - partition = equclass; - partition_last = equclass; - } - else - delete[] undetermined_chars; - - /* Add the keyword to the equivalence class. */ - KeywordExt_List *cons = new KeywordExt_List(keyword); - if (equclass->_keywords) - equclass->_keywords_last->rest() = cons; - else - equclass->_keywords = cons; - equclass->_keywords_last = cons; - equclass->_cardinality++; - } - - /* Free some of the allocated memory. The caller doesn't need it. */ - for (EquivalenceClass *cls = partition; cls; cls = cls->_next) - delete[] cls->_undetermined_chars; - - return partition; -} - -static void -delete_partition (EquivalenceClass *partition) -{ - while (partition != NULL) - { - EquivalenceClass *equclass = partition; - partition = equclass->_next; - delete_list (equclass->_keywords); - //delete[] equclass->_undetermined_chars; // already freed above - delete equclass; - } -} - -/* Compute the possible number of collisions when _asso_values[c] is - chosen, leading to the given partition. */ -unsigned int -Search::count_possible_collisions (EquivalenceClass *partition, unsigned int c) const -{ - /* Every equivalence class p is split according to the frequency of - occurrence of c, leading to equivalence classes p1, p2, ... - This leads to (|p|^2 - |p1|^2 - |p2|^2 - ...)/2 possible collisions. - Return the sum of this expression over all equivalence classes. */ - unsigned int sum = 0; - unsigned int m = _max_selchars_length; - DYNAMIC_ARRAY (split_cardinalities, unsigned int, m + 1); - for (EquivalenceClass *cls = partition; cls; cls = cls->_next) - { - for (unsigned int i = 0; i <= m; i++) - split_cardinalities[i] = 0; - - for (KeywordExt_List *temp = cls->_keywords; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - - unsigned int count = 0; - for (int i = 0; i < keyword->_selchars_length; i++) - if (keyword->_selchars[i] == c) - count++; - - split_cardinalities[count]++; - } - - sum += cls->_cardinality * cls->_cardinality; - for (unsigned int i = 0; i <= m; i++) - sum -= split_cardinalities[i] * split_cardinalities[i]; - } - FREE_DYNAMIC_ARRAY (split_cardinalities); - return sum; -} - -/* Test whether adding c to the undetermined characters changes the given - partition. */ -bool -Search::unchanged_partition (EquivalenceClass *partition, unsigned int c) const -{ - for (EquivalenceClass *cls = partition; cls; cls = cls->_next) - { - unsigned int first_count = UINT_MAX; - - for (KeywordExt_List *temp = cls->_keywords; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - - unsigned int count = 0; - for (int i = 0; i < keyword->_selchars_length; i++) - if (keyword->_selchars[i] == c) - count++; - - if (temp == cls->_keywords) - first_count = count; - else if (count != first_count) - /* c would split this equivalence class. */ - return false; - } - } - return true; -} - -void -Search::find_asso_values () -{ - Step *steps; - - /* Determine the steps, starting with the last one. */ - { - bool *undetermined; - bool *determined; - - steps = NULL; - - undetermined = new bool[_alpha_size]; - for (unsigned int c = 0; c < _alpha_size; c++) - undetermined[c] = false; - - determined = new bool[_alpha_size]; - for (unsigned int c = 0; c < _alpha_size; c++) - determined[c] = true; - - for (;;) - { - /* Compute the partition that needs to be refined. */ - EquivalenceClass *partition = compute_partition (undetermined); - - /* Determine the main character to be chosen in this step. - Choosing such a character c has the effect of splitting every - equivalence class (according the the frequency of occurrence of c). - We choose the c with the minimum number of possible collisions, - so that characters which lead to a large number of collisions get - handled early during the search. */ - unsigned int chosen_c; - unsigned int chosen_possible_collisions; - { - unsigned int best_c = 0; - unsigned int best_possible_collisions = UINT_MAX; - for (unsigned int c = 0; c < _alpha_size; c++) - if (_occurrences[c] > 0 && determined[c]) - { - unsigned int possible_collisions = - count_possible_collisions (partition, c); - if (possible_collisions < best_possible_collisions) - { - best_c = c; - best_possible_collisions = possible_collisions; - } - } - if (best_possible_collisions == UINT_MAX) - { - /* All c with _occurrences[c] > 0 are undetermined. We are - are the starting situation and don't need any more step. */ - delete_partition (partition); - break; - } - chosen_c = best_c; - chosen_possible_collisions = best_possible_collisions; - } - - /* We need one more step. */ - Step *step = new Step(); - - step->_undetermined = new bool[_alpha_size]; - memcpy (step->_undetermined, undetermined, _alpha_size*sizeof(bool)); - - step->_partition = partition; - - /* Now determine how the equivalence classes will be before this - step. */ - undetermined[chosen_c] = true; - partition = compute_partition (undetermined); - - /* Now determine which other characters should be determined in this - step, because they will not change the equivalence classes at - this point. It is the set of all c which, for all equivalence - classes, have the same frequency of occurrence in every keyword - of the equivalence class. */ - for (unsigned int c = 0; c < _alpha_size; c++) - if (_occurrences[c] > 0 && determined[c] - && unchanged_partition (partition, c)) - { - undetermined[c] = true; - determined[c] = false; - } - - /* main_c must be one of these. */ - if (determined[chosen_c]) - abort (); - - /* Now the set of changing characters of this step. */ - unsigned int changing_count; - - changing_count = 0; - for (unsigned int c = 0; c < _alpha_size; c++) - if (undetermined[c] && !step->_undetermined[c]) - changing_count++; - - unsigned int *changing = new unsigned int[changing_count]; - changing_count = 0; - for (unsigned int c = 0; c < _alpha_size; c++) - if (undetermined[c] && !step->_undetermined[c]) - changing[changing_count++] = c; - - step->_changing = changing; - step->_changing_count = changing_count; - - step->_asso_value_max = _asso_value_max; - - step->_expected_lower = - exp (static_cast(chosen_possible_collisions) - / static_cast(_max_hash_value)); - step->_expected_upper = - exp (static_cast(chosen_possible_collisions) - / static_cast(_asso_value_max)); - - delete_partition (partition); - - step->_next = steps; - steps = step; - } - - delete[] determined; - delete[] undetermined; - } - - if (option[DEBUG]) - { - unsigned int stepno = 0; - for (Step *step = steps; step; step = step->_next) - { - stepno++; - fprintf (stderr, "Step %u chooses _asso_values[", stepno); - for (unsigned int i = 0; i < step->_changing_count; i++) - { - if (i > 0) - fprintf (stderr, ","); - fprintf (stderr, "'%c'", step->_changing[i]); - } - fprintf (stderr, "], expected number of iterations between %g and %g.\n", - step->_expected_lower, step->_expected_upper); - fprintf (stderr, "Keyword equivalence classes:\n"); - for (EquivalenceClass *cls = step->_partition; cls; cls = cls->_next) - { - fprintf (stderr, "\n"); - for (KeywordExt_List *temp = cls->_keywords; temp; temp = temp->rest()) - { - KeywordExt *keyword = temp->first(); - fprintf (stderr, " %.*s\n", - keyword->_allchars_length, keyword->_allchars); - } - } - fprintf (stderr, "\n"); - } - } - - /* Initialize _asso_values[]. (The value given here matters only - for those c which occur in all keywords with equal multiplicity.) */ - for (unsigned int c = 0; c < _alpha_size; c++) - _asso_values[c] = 0; - - unsigned int stepno = 0; - for (Step *step = steps; step; step = step->_next) - { - stepno++; - - /* Initialize the asso_values[]. */ - unsigned int k = step->_changing_count; - for (unsigned int i = 0; i < k; i++) - { - unsigned int c = step->_changing[i]; - _asso_values[c] = - (_initial_asso_value < 0 ? rand () : _initial_asso_value) - & (step->_asso_value_max - 1); - } - - unsigned int iterations = 0; - DYNAMIC_ARRAY (iter, unsigned int, k); - for (unsigned int i = 0; i < k; i++) - iter[i] = 0; - unsigned int ii = (_jump != 0 ? k - 1 : 0); - - for (;;) - { - /* Test whether these asso_values[] lead to collisions among - the equivalence classes that should be collision-free. */ - bool has_collision = false; - for (EquivalenceClass *cls = step->_partition; cls; cls = cls->_next) - { - /* Iteration Number array is a win, O(1) initialization time! */ - _collision_detector->clear (); - - for (KeywordExt_List *ptr = cls->_keywords; ptr; ptr = ptr->rest()) - { - KeywordExt *keyword = ptr->first(); - - /* Compute the new hash code for the keyword, leaving apart - the yet undetermined asso_values[]. */ - int hashcode; - { - int sum = option[NOLENGTH] ? 0 : keyword->_allchars_length; - const unsigned int *p = keyword->_selchars; - int i = keyword->_selchars_length; - for (; i > 0; p++, i--) - if (!step->_undetermined[*p]) - sum += _asso_values[*p]; - hashcode = sum; - } - - /* See whether it collides with another keyword's hash code, - from the same equivalence class. */ - if (_collision_detector->set_bit (hashcode)) - { - has_collision = true; - break; - } - } - - /* Don't need to continue looking at the other equivalence - classes if we already have found a collision. */ - if (has_collision) - break; - } - - iterations++; - if (!has_collision) - break; - - /* Try other asso_values[]. */ - if (_jump != 0) - { - /* The way we try various values for - asso_values[step->_changing[0],...step->_changing[k-1]] - is like this: - for (bound = 0,1,...) - for (ii = 0,...,k-1) - iter[ii] := bound - iter[0..ii-1] := values <= bound - iter[ii+1..k-1] := values < bound - and - asso_values[step->_changing[i]] = - _initial_asso_value + iter[i] * _jump. - This makes it more likely to find small asso_values[]. - */ - unsigned int bound = iter[ii]; - unsigned int i = 0; - while (i < ii) - { - unsigned int c = step->_changing[i]; - iter[i]++; - _asso_values[c] = - (_asso_values[c] + _jump) & (step->_asso_value_max - 1); - if (iter[i] <= bound) - goto found_next; - _asso_values[c] = - (_asso_values[c] - iter[i] * _jump) - & (step->_asso_value_max - 1); - iter[i] = 0; - i++; - } - i = ii + 1; - while (i < k) - { - unsigned int c = step->_changing[i]; - iter[i]++; - _asso_values[c] = - (_asso_values[c] + _jump) & (step->_asso_value_max - 1); - if (iter[i] < bound) - goto found_next; - _asso_values[c] = - (_asso_values[c] - iter[i] * _jump) - & (step->_asso_value_max - 1); - iter[i] = 0; - i++; - } - /* Switch from one ii to the next. */ - { - unsigned int c = step->_changing[ii]; - _asso_values[c] = - (_asso_values[c] - bound * _jump) - & (step->_asso_value_max - 1); - iter[ii] = 0; - } - /* Here all iter[i] == 0. */ - ii++; - if (ii == k) - { - ii = 0; - bound++; - if (bound == step->_asso_value_max) - { - /* Out of search space! We can either backtrack, or - increase the available search space of this step. - It seems simpler to choose the latter solution. */ - step->_asso_value_max = 2 * step->_asso_value_max; - if (step->_asso_value_max > _asso_value_max) - { - _asso_value_max = step->_asso_value_max; - /* Reinitialize _max_hash_value. */ - _max_hash_value = - (option[NOLENGTH] ? 0 : _max_key_len) - + (_asso_value_max - 1) * _max_selchars_length; - /* Reinitialize _collision_detector. */ - delete _collision_detector; - _collision_detector = - new Bool_Array (_max_hash_value + 1); - } - } - } - { - unsigned int c = step->_changing[ii]; - iter[ii] = bound; - _asso_values[c] = - (_asso_values[c] + bound * _jump) - & (step->_asso_value_max - 1); - } - found_next: ; - } - else - { - /* Random. */ - unsigned int c = step->_changing[ii]; - _asso_values[c] = - (_asso_values[c] + rand ()) & (step->_asso_value_max - 1); - /* Next time, change the next c. */ - ii++; - if (ii == k) - ii = 0; - } - } - FREE_DYNAMIC_ARRAY (iter); - - if (option[DEBUG]) - { - fprintf (stderr, "Step %u chose _asso_values[", stepno); - for (unsigned int i = 0; i < step->_changing_count; i++) - { - if (i > 0) - fprintf (stderr, ","); - fprintf (stderr, "'%c'", step->_changing[i]); - } - fprintf (stderr, "] in %u iterations.\n", iterations); - } - } - - /* Free allocated memory. */ - while (steps != NULL) - { - Step *step = steps; - steps = step->_next; - delete[] step->_changing; - delete[] step->_undetermined; - delete_partition (step->_partition); - delete step; - } -} - -/* Computes a keyword's hash value, relative to the current _asso_values[], - and stores it in keyword->_hash_value. */ - -inline int -Search::compute_hash (KeywordExt *keyword) const -{ - int sum = option[NOLENGTH] ? 0 : keyword->_allchars_length; - - const unsigned int *p = keyword->_selchars; - int i = keyword->_selchars_length; - for (; i > 0; p++, i--) - sum += _asso_values[*p]; - - return keyword->_hash_value = sum; -} - -/* Finds good _asso_values[]. */ - -void -Search::find_good_asso_values () -{ - prepare_asso_values (); - - /* Search for good _asso_values[]. */ - int asso_iteration; - if ((asso_iteration = option.get_asso_iterations ()) == 0) - /* Try only the given _initial_asso_value and _jump. */ - find_asso_values (); - else - { - /* Try different pairs of _initial_asso_value and _jump, in the - following order: - (0, 1) - (1, 1) - (2, 1) (0, 3) - (3, 1) (1, 3) - (4, 1) (2, 3) (0, 5) - (5, 1) (3, 3) (1, 5) - ..... */ - KeywordExt_List *saved_head = _head; - int best_initial_asso_value = 0; - int best_jump = 1; - int *best_asso_values = new int[_alpha_size]; - int best_collisions = INT_MAX; - int best_max_hash_value = INT_MAX; - - _initial_asso_value = 0; _jump = 1; - for (;;) - { - /* Restore the keyword list in its original order. */ - _head = copy_list (saved_head); - /* Find good _asso_values[]. */ - find_asso_values (); - /* Test whether it is the best solution so far. */ - int collisions = 0; - int max_hash_value = INT_MIN; - _collision_detector->clear (); - for (KeywordExt_List *ptr = _head; ptr; ptr = ptr->rest()) - { - KeywordExt *keyword = ptr->first(); - int hashcode = compute_hash (keyword); - if (max_hash_value < hashcode) - max_hash_value = hashcode; - if (_collision_detector->set_bit (hashcode)) - collisions++; - } - if (collisions < best_collisions - || (collisions == best_collisions - && max_hash_value < best_max_hash_value)) - { - memcpy (best_asso_values, _asso_values, - _alpha_size * sizeof (_asso_values[0])); - best_collisions = collisions; - best_max_hash_value = max_hash_value; - } - /* Delete the copied keyword list. */ - delete_list (_head); - - if (--asso_iteration == 0) - break; - /* Prepare for next iteration. */ - if (_initial_asso_value >= 2) - _initial_asso_value -= 2, _jump += 2; - else - _initial_asso_value += _jump, _jump = 1; - } - _head = saved_head; - /* Install the best found asso_values. */ - _initial_asso_value = best_initial_asso_value; - _jump = best_jump; - memcpy (_asso_values, best_asso_values, - _alpha_size * sizeof (_asso_values[0])); - delete[] best_asso_values; - /* The keywords' _hash_value fields are recomputed below. */ - } -} - -/* ========================================================================= */ - -/* Comparison function for sorting by increasing _hash_value. */ -static bool -less_by_hash_value (KeywordExt *keyword1, KeywordExt *keyword2) -{ - return keyword1->_hash_value < keyword2->_hash_value; -} - -/* Sorts the keyword list by hash value. */ - -void -Search::sort () -{ - _head = mergesort_list (_head, less_by_hash_value); -} - -void -Search::optimize () -{ - /* Preparations. */ - prepare (); - - /* Step 1: Finding good byte positions. */ - find_positions (); - - /* Step 2: Finding good alpha increments. */ - find_alpha_inc (); - - /* Step 3: Finding good asso_values. */ - find_good_asso_values (); - - /* Make one final check, just to make sure nothing weird happened.... */ - _collision_detector->clear (); - for (KeywordExt_List *curr_ptr = _head; curr_ptr; curr_ptr = curr_ptr->rest()) - { - KeywordExt *curr = curr_ptr->first(); - unsigned int hashcode = compute_hash (curr); - if (_collision_detector->set_bit (hashcode)) - { - /* This shouldn't happen. proj1, proj2, proj3 must have been - computed to be injective on the given keyword set. */ - fprintf (stderr, - "\nInternal error, unexpected duplicate hash code\n"); - if (option[POSITIONS]) - fprintf (stderr, "try options -m or -r, or use new key positions.\n\n"); - else - fprintf (stderr, "try options -m or -r.\n\n"); - exit (1); - } - } - - /* Sorts the keyword list by hash value. */ - sort (); - - /* Set unused asso_values[c] to max_hash_value + 1. This is not absolutely - necessary, but speeds up the lookup function in many cases of lookup - failure: no string comparison is needed once the hash value of a string - is larger than the hash value of any keyword. */ - int max_hash_value; - { - KeywordExt_List *temp; - for (temp = _head; temp->rest(); temp = temp->rest()) - ; - max_hash_value = temp->first()->_hash_value; - } - for (unsigned int c = 0; c < _alpha_size; c++) - if (_occurrences[c] == 0) - _asso_values[c] = max_hash_value + 1; - - /* Propagate unified asso_values. */ - if (_alpha_unify) - for (unsigned int c = 0; c < _alpha_size; c++) - if (_alpha_unify[c] != c) - _asso_values[c] = _asso_values[_alpha_unify[c]]; -} - -/* Prints out some diagnostics upon completion. */ - -Search::~Search () -{ - delete _collision_detector; - if (option[DEBUG]) - { - fprintf (stderr, "\ndumping occurrence and associated values tables\n"); - - for (unsigned int i = 0; i < _alpha_size; i++) - if (_occurrences[i]) - fprintf (stderr, "asso_values[%c] = %6d, occurrences[%c] = %6d\n", - i, _asso_values[i], i, _occurrences[i]); - - fprintf (stderr, "end table dumping\n"); - - fprintf (stderr, "\nDumping key list information:\ntotal non-static linked keywords = %d" - "\ntotal keywords = %d\ntotal duplicates = %d\nmaximum key length = %d\n", - _list_len, _total_keys, _total_duplicates, _max_key_len); - - int field_width = _max_selchars_length; - fprintf (stderr, "\nList contents are:\n(hash value, key length, index, %*s, keyword):\n", - field_width, "selchars"); - for (KeywordExt_List *ptr = _head; ptr; ptr = ptr->rest()) - { - fprintf (stderr, "%11d,%11d,%6d, ", - ptr->first()->_hash_value, ptr->first()->_allchars_length, ptr->first()->_final_index); - if (field_width > ptr->first()->_selchars_length) - fprintf (stderr, "%*s", field_width - ptr->first()->_selchars_length, ""); - for (int j = 0; j < ptr->first()->_selchars_length; j++) - putc (ptr->first()->_selchars[j], stderr); - fprintf (stderr, ", %.*s\n", - ptr->first()->_allchars_length, ptr->first()->_allchars); - } - - fprintf (stderr, "End dumping list.\n\n"); - } - delete[] _asso_values; - delete[] _occurrences; - delete[] _alpha_unify; - delete[] _alpha_inc; -} diff --git a/contrib/gperf/src/search.h b/contrib/gperf/src/search.h deleted file mode 100644 index 6b562c9a8b68..000000000000 --- a/contrib/gperf/src/search.h +++ /dev/null @@ -1,165 +0,0 @@ -/* This may look like C code, but it is really -*- C++ -*- */ - -/* Search algorithm. - - Copyright (C) 1989-1998, 2000, 2002 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef search_h -#define search_h 1 - -#include "keyword-list.h" -#include "positions.h" -#include "bool-array.h" - -struct EquivalenceClass; - -class Search -{ -public: - Search (KeywordExt_List *list); - ~Search (); - void optimize (); -private: - void prepare (); - - /* Computes the upper bound on the indices passed to asso_values[], - assuming no alpha_increments. */ - unsigned int compute_alpha_size () const; - - /* Computes the unification rules between different asso_values[c], - assuming no alpha_increments. */ - unsigned int * compute_alpha_unify () const; - - /* Initializes each keyword's _selchars array. */ - void init_selchars_tuple (const Positions& positions, const unsigned int *alpha_unify) const; - /* Deletes each keyword's _selchars array. */ - void delete_selchars () const; - - /* Count the duplicate keywords that occur with a given set of positions. */ - unsigned int count_duplicates_tuple (const Positions& positions, const unsigned int *alpha_unify) const; - - /* Find good key positions. */ - void find_positions (); - - /* Count the duplicate keywords that occur with the found set of positions. */ - unsigned int count_duplicates_tuple () const; - - /* Computes the upper bound on the indices passed to asso_values[]. */ - unsigned int compute_alpha_size (const unsigned int *alpha_inc) const; - - /* Computes the unification rules between different asso_values[c]. */ - unsigned int * compute_alpha_unify (const Positions& positions, const unsigned int *alpha_inc) const; - - /* Initializes each keyword's _selchars array. */ - void init_selchars_multiset (const Positions& positions, const unsigned int *alpha_unify, const unsigned int *alpha_inc) const; - - /* Count the duplicate keywords that occur with the given set of positions - and a given alpha_inc[] array. */ - unsigned int count_duplicates_multiset (const unsigned int *alpha_inc) const; - - /* Find good _alpha_inc[]. */ - void find_alpha_inc (); - - /* Initializes the asso_values[] related parameters. */ - void prepare_asso_values (); - - EquivalenceClass * compute_partition (bool *undetermined) const; - - unsigned int count_possible_collisions (EquivalenceClass *partition, unsigned int c) const; - - bool unchanged_partition (EquivalenceClass *partition, unsigned int c) const; - - /* Finds some _asso_values[] that fit. */ - void find_asso_values (); - - /* Computes a keyword's hash value, relative to the current _asso_values[], - and stores it in keyword->_hash_value. */ - int compute_hash (KeywordExt *keyword) const; - - /* Finds good _asso_values[]. */ - void find_good_asso_values (); - - /* Sorts the keyword list by hash value. */ - void sort (); - -public: - - /* Linked list of keywords. */ - KeywordExt_List * _head; - - /* Total number of keywords, counting duplicates. */ - int _total_keys; - - /* Maximum length of the longest keyword. */ - int _max_key_len; - - /* Minimum length of the shortest keyword. */ - int _min_key_len; - - /* User-specified or computed key positions. */ - Positions _key_positions; - - /* Adjustments to add to bytes add specific key positions. */ - unsigned int * _alpha_inc; - - /* Size of alphabet. */ - unsigned int _alpha_size; - - /* Alphabet character unification, either the identity or a mapping from - upper case characters to lower case characters (and maybe more). */ - unsigned int * _alpha_unify; - - /* Maximum _selchars_length over all keywords. */ - unsigned int _max_selchars_length; - - /* Total number of duplicates that have been moved to _duplicate_link lists - (not counting their representatives which stay on the main list). */ - int _total_duplicates; - - /* Counts occurrences of each key set character. - _occurrences[c] is the number of times that c occurs among the _selchars - of a keyword. */ - int * _occurrences; - /* Value associated with each character. */ - int * _asso_values; - -private: - - /* Length of _head list. Number of keywords, not counting duplicates. */ - int _list_len; - - /* Exclusive upper bound for every _asso_values[c]. A power of 2. */ - unsigned int _asso_value_max; - - /* Initial value for asso_values table. -1 means random. */ - int _initial_asso_value; - /* Jump length when trying alternative values. 0 means random. */ - int _jump; - - /* Maximal possible hash value. */ - int _max_hash_value; - - /* Sparse bit vector for collision detection. */ - Bool_Array * _collision_detector; -}; - -#endif diff --git a/contrib/gperf/src/version.cc b/contrib/gperf/src/version.cc deleted file mode 100644 index f86ef4d455fa..000000000000 --- a/contrib/gperf/src/version.cc +++ /dev/null @@ -1,28 +0,0 @@ -/* Current program version number. - - Copyright (C) 1989-1998, 2000, 2002-2003, 2005, 2007 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Specification. */ -#include "version.h" - -/* Current release version. */ -const char *version_string = "3.0.3"; diff --git a/contrib/gperf/src/version.h b/contrib/gperf/src/version.h deleted file mode 100644 index feafbe98888a..000000000000 --- a/contrib/gperf/src/version.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Current program version number. - - Copyright (C) 1989-1998, 2002 Free Software Foundation, Inc. - Written by Douglas C. Schmidt - and Bruno Haible . - - This file is part of GNU GPERF. - - GNU GPERF is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU GPERF is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. - If not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Current release version. */ -extern const char *version_string;